Ich denke, was Sie suchen, sind parameterized Tests, nicht generierte Tests. Wenn ich Sie richtig verstehe, möchten Sie den gleichen Test für viele verschiedene "Dinge" ausführen.
In einem parametrisierten Test führen Sie das durch, indem Sie eine statische Methode deklarieren, die die Daten zurückgibt, und dann JUnit anweist, den Runner Parameterized
zum Ausführen des Tests zu verwenden. Jede Testklasse wird dann mit einem Argument als Testdaten instanziiert, auf die die Testmethode zugreifen kann.
@RunWith(Parameterized.class)
public class FibonacciTest {
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{ 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 }
});
}
private int fInput;
private int fExpected;
public FibonacciTest(int input, int expected) {
fInput= input;
fExpected= expected;
}
@Test
public void test() {
assertEquals(fExpected, Fibonacci.compute(fInput));
}
}
Ein alternativer Ansatz wäre theories. Mit einer Theorie betten Sie die Testdaten in die Testklasse als unterschiedliche statische Felder ein, die mit @Datapoint
annotiert sind, und jede Testmethode wird für jeden Datenpunkt wiederholt aufgerufen, wobei der spezifische Datenpunkt als Argument übergeben wird. Auch hier haben Sie einen speziellen Läufer, um sie geschehen ...
@RunWith(Theories.class)
public class UserTest {
@DataPoint
public static String GOOD_USERNAME = "optimus";
@DataPoint
public static String USERNAME_WITH_SLASH = "optimus/prime";
@Theory
public void filenameIncludesUsername(String username) {
assumeThat(username, not(containsString("/")));
assertThat(new User(username).configFileName(), containsString(username));
}
}
Sie auch Ihr Leben viel einfacher und mit [Spock] (https://github.com/spockframework/spock) machen könnte und [ seine Unterstützung für die Testparametrisierung] (http://spockframework.github.io/spock/docs/1.0/data_driven_testing.html). – erdi