Охват условий и модульное тестирование - PullRequest
0 голосов
/ 11 февраля 2019

при написании модульных тестов (с junit), необходимо ли разделять методы тестирования для достижения полного покрытия условий?

возьмем этот фрагмент, например:

int foo(boolean a, boolean b, boolean c){
    if(a && b && c)
        return 1;
    else return 0;
}

Это лучше?написать один метод и разные утверждения для покрытия условий, если это если?Или один метод для каждого условия?

@Test
void conditionsTest(){
    assertEqual(0, foo(true, false, false));
    assertEqual(0, foo(true, true, false));
    assertEqual(1, foo(true, true, true));
    ...
}

ИЛИ

@Test
void condition1Test(){
    assertEqual(0, foo(true, false, false));
}

@Test
void condition2Test(){
    assertEqual(0, foo(true, true, false));
}

@Test
void condition3Test(){
    assertEqual(1, foo(true, true, true));
}

1 Ответ

0 голосов
/ 11 февраля 2019

Хотя это не необходимо для разделения тестов, для этого может быть лучше :

  1. Все в одномТестовая функция прервет выполнение при первом неудачном утверждении.Нет информации о других комбинациях.Когда вы разделены, у вас будет более подробная информация о том, какие комбинации потерпят неудачу.Обратите внимание, что параметризованные тесты достигнут того же результата.

  2. С точки зрения охвата тест «все в одном» накапливает покрытие в одном тесте.Без возможности проанализировать вклад каждой комбинации условий.Это становится еще более ценным при переходе к более сложным показателям покрытия условий, таким как MC / DC .

Предоставлено: второй аспект зависит от степени детализации сбора данных, обеспечиваемойваш инструмент покрытия.Инструмент нашей компании Coco собирает покрытие для каждой тестовой функции, но пока только для C, C ++ и C #.Возможно, вы захотите найти эквивалентную возможность для кода Java.

...