Wie verwende ich @Tempdir mit jungit 5 ​​@parametrizizedTest, um ein separates temporäres Verzeichnis für jeden Test zu

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Wie verwende ich @Tempdir mit jungit 5 ​​@parametrizizedTest, um ein separates temporäres Verzeichnis für jeden Test zu

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?

Top