使用Catch包含测试用例的组合爆炸

时间:2016-04-06 17:00:49

标签: catch-unit-test

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

如果我想使用Catch来充分测试所有情况,那么我需要进行64次单独的单元测试。

现在,让我们说在未来的某个时刻,我添加了第7个布尔参数。现在,我必须编写的测试用例数量增加了一倍,达到128个。

我是否可以通过一种方式自行“生成”来自单个测试规范的所有2 ^ n个测试用例来进行单元测试?

1 个答案:

答案 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次。

...但我假设您想要做的就是运用所有组合。如果您确实想在每种情况下验证输出是否满足某些期望,则需要执行更多操作。

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