2016-04-06 2 views
0

Скажем, у меня есть простой класс, который принимает 6 булевых аргументов в своем конструкторе и выполняет некоторые вычисления, основанные на состоянии этих аргументов.Содержит комбинаторный взрыв тестовых примеров с использованием Catch

Если я хочу использовать Catch для адекватного тестирования всех случаев, тогда мне понадобится 64 отдельных модульных теста.

Теперь, скажем, в какой-то момент в будущем я добавляю 7-й булевский аргумент. Теперь число тестовых случаев, которые мне нужно написать, удвоилось до 128.

Есть ли способ, которым я могу выполнить мой модульный тест, например, как автоматически «генерировать» все 2^n тестовые примеры из единая спецификация теста?

ответ

1

Вы можете использовать generators часть улова автоматически пройти через все различные комбинации BOOLS, что функция принимает:

TEST_CASE("where is my sandwich", "[hunger][food]") 
{ 
    bool wantLettuce = GENERATE(Values(false, true)); 
    bool wantTomato = GENERATE(Values(false, true)); 
    bool wantBacon = GENERATE(Values(false, true)); 
    bool wantCheese = GENERATE(Values(false, true)); 
    bool wantEgg = GENERATE(Values(false, true)); 

    CHECK(sandwichAssembler(wantLettuce, wantTomato, wantBacon, wantCheese, wantEgg)); 
} 

IIRC это заставит Поймайте запустить 2^5 раз пытался все комбинации.

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

(Я не проверял это - вспоминая из памяти, ожидая моего сэндвича в кафе в Барселоне)

Смежные вопросы