0

假设我有一个简单的类,它在其构造函数中接受 6 个布尔参数,并根据这些参数的状态执行一些计算。

如果我想使用 Catch 来充分测试所有案例,那么我需要 64 个单独的单元测试。

现在,假设在未来的某个时刻,我添加了第 7 个布尔参数。现在我必须编写的测试用例数量翻了一番,达到 128 个。

有没有一种方法可以制作我的单元测试,例如从单个测试规范自动“生成”所有 2^n 测试用例?

4

1 回答 1

1

您可以使用 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 次尝试所有组合。

...但我假设你想要做的就是锻炼所有的组合。如果您确实想验证输出在每种情况下都满足某些期望,则需要做更多工作。

(我没有测试过这个——在巴塞罗那的一家咖啡馆等三明治的时候从记忆中回忆)

于 2016-04-07T20:55:52.037 回答