【问题标题】:How can you use utility functions with UnitTest++如何在 UnitTest++ 中使用实用程序函数
【发布时间】:2009-03-23 06:26:38
【问题描述】:

我正在使用 UnitTest++ 对 C++ 代码进行单元测试。

在我的测试中,有一组测试我会重复几次。我想要一个实用函数来执行这些测试。简而言之,我想接受这个:

TEST( foo ) {
    Foo one;
    Foo two;

    // init one & two
    // lots of CHECK_CLOSE(one.bar, two.bar, 1e-5); in repeating cycles
}

TEST( bar ) {
    Foo one;
    Foo two;

    // init one & two
    // lots of CHECK_CLOSE(one.bar, two.bar, 1e-5); in repeating cycles
}

然后使用这个:

void blah( const Foo& one, const Foo& two ) {
    // lots of CHECK_CLOSE(one.bar, two.bar, 1e-5);
}

TEST( foo ) {
    Foo one;
    Foo two;

    // init one & two
    blah(one, two);
}

TEST( bar ) {
    Foo one;
    Foo two;

    // init one & two
    blah(one, two);
}

由于 UnitTest++ 的宏操作,这不起作用。解决这个问题的最佳方法是什么?

编辑:我现在无法查看的一些想法。

  1. 如果我使用带有struct 中的实用程序函数的夹具,我是否能够从该函数中调用 UnitTest++ 宏?
  2. 我可以编写一个宏来执行常见的测试。我不是很喜欢这样,但至少我会干瞪眼……

【问题讨论】:

    标签: c++ unit-testing


    【解决方案1】:

    编写一个宏来完成它。不要让“宏是邪恶的”口头禅对您隐藏这个事实:宏旨在生成重复代码。

    【讨论】:

      【解决方案2】:

      我建议不要这样做,因为你会丢失很多关于哪个测试失败的信息,包装函数现在包含了两个或更多测试的功能,所以当它失败时你必须回溯才能看到测试失败的原因是什么。

      【讨论】:

      • 是的,但是根据传递的参数,实用程序函数可能会因不同的原因而失败。
      • 我同意,您会发现实用程序或包装函数的价值降低了,因为您必须回溯以找出它失败的原因以及它实际运行的测试。如果您对测试进行硬编码,则不会发生这种情况
      • 那么您会建议在每种测试方法中重复测试几次吗?嗯,这似乎是 UnitTest++ 的一个很大的限制
      • 这是所有单元测试框架的一种限制。你必须在这里做一个权衡
      【解决方案3】:

      使您的常用检查函数返回布尔值。然后在每个 TEST 中检查或断言你的常用函数的结果。

      【讨论】:

      • 这就是我现在正在做的事情,但是这样我会丢失信息 - 我只知道实用程序函数中的一项检查失败,但不知道是哪一项。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多