Wie verwende ich @Tempdir mit jungit 5 @parametrizizedTest, um ein separates temporäres Verzeichnis für jeden Test zu
Posted: 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>
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. in parametrisierte Tests zu integrieren, ohne Konflikte mit den Parameter -Resolver von Junit zu verursachen?
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
}
}
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