让我们说我有一个简单的类,它在构造函数中接受6个布尔参数,并根据这些参数的状态执行一些计算。
如果我想使用Catch来充分测试所有情况,那么我需要进行64次单独的单元测试。
现在,让我们说在未来的某个时刻,我添加了第7个布尔参数。现在,我必须编写的测试用例数量增加了一倍,达到128个。
我是否可以通过一种方式自行“生成”来自单个测试规范的所有2 ^ n个测试用例来进行单元测试?
答案 0 :(得分:1)
您可以使用Catch的generators部分自动浏览您的函数所需的所有bool组合:
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这将导致Catch尝试所有组合运行2 ^ 5次。
...但我假设您想要做的就是运用所有组合。如果您确实想在每种情况下验证输出是否满足某些期望,则需要执行更多操作。
(我没有测试过这个 - 在巴塞罗那的一家咖啡馆等我的三明治时从记忆中回忆起来)