by Anonymous » 21 Mar 2025, 07:03
Ich verwende JUNIT 5's @ParameterizedTest Annotation, um Tests mit unterschiedlichen Eingaben auszuführen, und
ich möchte für jeden Test ein separates temporäres Verzeichnis erstellen. So sieht mein Code aus: < /p>
Code: Select all
class MyTestClass {
static Stream syntax() {
return Stream.of(
Arguments.of("grammars/Simple.g4", "expr"),
Arguments.of("grammars/Arithmetic.g4", "prog")
);
}
@ParameterizedTest
@MethodSource("syntax")
void checksSyntax(
@TempDir final Path temp, // Temporary directory created by JUnit
final String name,
final String rule
) {
// some testing logic
}
}
Die Methode Syntax () bietet verschiedene Eingaben für den Test, und
ich möchte sicherstellen, dass jeder Testlauf über ein eigenes temporäres Verzeichnis verfügt.
Code: Select all
org.junit.jupiter.api.extension.ParameterResolutionException:
Discovered multiple competing ParameterResolvers for parameter [java.nio.file.Path arg0]
in method [void checksSyntax(java.nio.file.Path,java.lang.String,java.lang.String)]:
org.junit.jupiter.engine.extension.TempDirectory@4ae3c1cd,
org.junit.jupiter.params.ParameterizedTestParameterResolver@29f69090
< /code>
Ich habe versucht, den Code zu ändern, indem ich das temporäre Verzeichnis aus der Methodequelle übergeben habe: < /p>
static Stream syntax(@TempDir final Path temp) {
return Stream.of(
Arguments.of(temp, "grammars/Simple.g4", "expr"),
Arguments.of(temp, "grammars/Arithmetic.g4", "prog")
);
}
< /code>
Dies führt jedoch dazu, dass das gleiche temporäre Verzeichnis für alle Testfälle verwendet wird, was nicht das ist, was ich möchte. Ich brauche ein separates temporäres Verzeichnis für jeden Testfall. Was ist der richtige Weg, um @tempdir
in parametrisierte Tests zu integrieren, ohne Konflikte mit den Parameter -Resolver von Junit zu verursachen?
Ich verwende JUNIT 5's @ParameterizedTest Annotation, um Tests mit unterschiedlichen Eingaben auszuführen, und [url=viewtopic.php?t=14917]ich möchte[/url] für jeden Test ein separates temporäres Verzeichnis erstellen. So sieht mein Code aus: < /p>
[code]class MyTestClass {
static Stream syntax() {
return Stream.of(
Arguments.of("grammars/Simple.g4", "expr"),
Arguments.of("grammars/Arithmetic.g4", "prog")
);
}
@ParameterizedTest
@MethodSource("syntax")
void checksSyntax(
@TempDir final Path temp, // Temporary directory created by JUnit
final String name,
final String rule
) {
// some testing logic
}
}
[/code]
Die Methode Syntax () bietet verschiedene Eingaben für den Test, und [url=viewtopic.php?t=14917]ich möchte[/url] sicherstellen, dass jeder Testlauf über ein eigenes temporäres Verzeichnis verfügt.[code]org.junit.jupiter.api.extension.ParameterResolutionException:
Discovered multiple competing ParameterResolvers for parameter [java.nio.file.Path arg0]
in method [void checksSyntax(java.nio.file.Path,java.lang.String,java.lang.String)]:
org.junit.jupiter.engine.extension.TempDirectory@4ae3c1cd,
org.junit.jupiter.params.ParameterizedTestParameterResolver@29f69090
< /code>
Ich habe versucht, den Code zu ändern, indem ich das temporäre Verzeichnis aus der Methodequelle übergeben habe: < /p>
static Stream syntax(@TempDir final Path temp) {
return Stream.of(
Arguments.of(temp, "grammars/Simple.g4", "expr"),
Arguments.of(temp, "grammars/Arithmetic.g4", "prog")
);
}
< /code>
Dies führt jedoch dazu, dass das gleiche temporäre Verzeichnis für alle Testfälle verwendet wird, was nicht das ist, was ich möchte. Ich brauche ein separates temporäres Verzeichnis für jeden Testfall. Was ist der richtige Weg, um @tempdir [/code] in parametrisierte Tests zu integrieren, ohne Konflikte mit den Parameter -Resolver von Junit zu verursachen?