2016-03-24 4 views
0

Можно ли генерировать тесты и запускать их?Geb JUnit4 автогенерированные тесты

У меня есть, например. список URL-адресов, которые я хотел бы проверить, указывают ли они на страницу 404 и некоторые другие тесты. Я не хочу создавать для каждой ссылки отдельный тест. Это была бы большая работа.

Если это невозможно, можно ли указать из теста на другой, а если другой не пройдет, первый тест будет продолжен?

Для моего тестирования я использую Groovy с Gebish, Gradle и JUnit4.

ответ

1

Я думаю, что вы ищете 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)); 
    } 
} 
+0

Вы можете также сделать вашу жизнь намного проще и использовать [Спок] (https://github.com/spockframework/spock) и [ его поддержка параметризации теста] (http://spockframework.github.io/spock/docs/1.0/data_driven_testing.html). – erdi