假设我有一个简单的类,它在其构造函数中接受 6 个布尔参数,并根据这些参数的状态执行一些计算。
如果我想使用 Catch 来充分测试所有案例,那么我需要 64 个单独的单元测试。
现在,假设在未来的某个时刻,我添加了第 7 个布尔参数。现在我必须编写的测试用例数量翻了一番,达到 128 个。
有没有一种方法可以制作我的单元测试,例如从单个测试规范自动“生成”所有 2^n 测试用例?
假设我有一个简单的类,它在其构造函数中接受 6 个布尔参数,并根据这些参数的状态执行一些计算。
如果我想使用 Catch 来充分测试所有案例,那么我需要 64 个单独的单元测试。
现在,假设在未来的某个时刻,我添加了第 7 个布尔参数。现在我必须编写的测试用例数量翻了一番,达到 128 个。
有没有一种方法可以制作我的单元测试,例如从单个测试规范自动“生成”所有 2^n 测试用例?
您可以使用 Catch 的生成器部分自动遍历函数采用的所有不同的布尔组合:
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 次尝试所有组合。
...但我假设你想要做的就是锻炼所有的组合。如果您确实想验证输出在每种情况下都满足某些期望,则需要做更多工作。
(我没有测试过这个——在巴塞罗那的一家咖啡馆等三明治的时候从记忆中回忆)