2016-06-30 4 views
1

Итак, я создаю тестовые примеры для моего проекта, и я использую JUnit для тестирования. Теперь проблема, с которой я сталкиваюсь, заключается в том, что мне нужен другой набор аргументов для разных тестовых примеров одного и того же файла.Различные параметризованные аргументы для разных тестов JUNIT

public class ForTesting{ 
    //Test 1 should run on ips {1, true} and {2,true} 
    @Test 
    public void Test1() 
    { 
     //Do first Test case 
    } 
    //Test 2 should run on ips {3,true} and {4,true} 
    @Test 
    public void Test2() 
    { 
     //Do another Test case 
    } 
} 

Я знаю, что я могу предоставить несколько аргументов с помощью параметризованных аргументов, но проблема в том, и тот же набор аргументов выполняются для всех тестов. Есть ли способ сделать это?

ответ

3

Если вы не только ищете стандартного JUnit параметризованных тестов, а также в зависимости от правовой политики вашей компании вы можете использовать (по крайней мере) следующие 2 библиотеки, которые делают вещи проще (как реализовать и чтения):

1) JUnitParams (Apache 2)

@RunWith(JUnitParamsRunner.class) 
public class PersonTest { 

    @Test 
    @Parameters({"17, false", 
       "22, true" }) 
    public void shouldDecideAdulthood(int age, boolean expectedAdulthood) throws Exception { 
    assertThat(new Person(age).isAdult(), is(expectedAdulthood)); 
    } 
} 

2) Zohhak (LGPL) вдохновлен JUnit Params, но в результате чего некоторые more sugar к столу (простой разделитель конфигурации, преобразователи и т.д.)

@RunWith(ZohhakRunner.class) 
public class PersonTest { 

    @TestWith({"17, false", 
      "22, true" }) 
    public void shouldDecideAdulthood(int age, boolean expectedAdulthood) throws Exception { 
    assertThat(new Person(age).isAdult(), is(expectedAdulthood)); 
    } 
} 


кредитов: Приведенные выше примеры были беззастенчиво скопированы и скорректирована с помощью readme JUnitParams.

+0

Спасибо, что мне нужно! – Rohan

+0

отличный ответ !. Вы пробовали огурец? – moldovean

+0

@moldovean еще нет, просто прочитал об этом некоторое время назад, но пока не имел контекста для него – Morfic

1

Несколько вариантов:

Использование Theories.

В @ Теории используйте Assume.assumeThat.

@Theory 
public void shouldPassForSomeInts(int param) { 
    Assume.assumeTrue(param == 1 || param == 2); 
} 

@Theory 
public void shouldPassForSomeInts(int param) { 
    ... 
} 

Или используйте @TestedOn.

@Theory 
public void shouldPassForSomeInts(@TestedOn(ints={1, 2}) int param) { 
    ... 
} 

@Theory 
public void shouldPassForSomeInts(@TestedOn(ints={3,4}) int param) { 
    ... 
} 
Смежные вопросы