Я думаю, что вы ищете parameterized тестов, а не сгенерированных тестов. Если я правильно вас понимаю, вы хотите запустить тот же самый тест для множества разных вещей.
В параметризованном тесте вы делаете это, объявляя статический метод, который возвращает данные, а затем сообщает JUnit использовать бегун Parameterized
для запуска теста. Каждый тестовый класс затем создается с аргументом в качестве тестовых данных, к которым может иметь доступ метод тестирования.
@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));
}
}
Альтернативный подход будет theories. С помощью теории вы вставляете тестовые данные в тестовый класс в виде разных статических полей, аннотированных с помощью @Datapoint
, и каждый метод тестирования вызывается повторно для каждого дататота с указанием конкретной точки данных в качестве аргумента. Опять же, у вас есть специальный бегунок, чтобы это произошло ...
@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));
}
}
Вы можете также сделать вашу жизнь намного проще и использовать [Спок] (https://github.com/spockframework/spock) и [ его поддержка параметризации теста] (http://spockframework.github.io/spock/docs/1.0/data_driven_testing.html). – erdi