Параметризованное тестирование с помощью Junit

#junit4 #parameterized-unit-test

#junit4 #параметризованный модульный тест

Вопрос:

Как я могу протестировать следующий метод с параметризованным тестированием в JUnit

 public class Math {
    public static int add(int a, int b) {  
        return a   b;
    }
}
  

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

Ответ №1:

Тестовый класс должен иметь аннотацию, @RunWith(Parameterized.class) а функция, возвращающая Collection<Object[]> , должна быть отмечена @Parameters , и конструктор, принимающий входные данные и ожидаемые выходные данные

API:http://junit.sourceforge.net/javadoc/org/junit/runners/Parameterized.html

  @RunWith(Parameterized.class)
 public class AddTest {
        @Parameters
        public static Collection<Object[]> data() {
                return Arrays.asList(new Object[][] {
                                { { 0, 0, 0 }, { 1, 1 ,2}, 
                                  { 2, 1, 3 }, { 3, 2, 5 }, 
                                  { 4, 3, 7 }, { 5, 5, 10 },
                                  { 6, 8, 14 } } });
        }

        private int input1;
        private int input2;

        private int sum;

        public AddTest(int input1, int input2, int sum) {
                this.input1= input1;
                this.input2= input2;
                this.sum = sum;
        }

        @Test
        public void test() {

                assertEquals(sum, Math.Add(input1,input2));
        }
 }
  

Ответ №2:

недавно я запустил проект zohhak. я считаю, что это намного чище, чем @Parametrized:

 @TestWith({
   "25 USD, 7",
   "38 GBP, 2",
   "null, 0"
})
public void testMethod(Money money, int anotherParameter) {
   ...
}