是否有广泛使用的C ++单元测试框架支持测试类别?

时间:2013-02-05 02:05:23

标签: c++ unit-testing

我目前正在使用CppUnit进行测试,但由于缺乏对Categories概念的支持而感到沮丧。 有没有广泛使用的C ++单元测试框架支持这个想法?

以下是直接来自NUnit文档的示例:

namespace NUnit.Tests
{
  using System;
  using NUnit.Framework;

  [TestFixture]
  [Category("LongRunning")]
  public class LongRunningTests
  {
    // ...
  }
}

我们的想法是能够对不同类别的测试进行分组,并在指定的类别中执行测试,或者根据类别排除测试。

我尝试过CppUnit,Boost.Test和Google Test,但没有一个直接支持这个想法。

例如,我有单元测试,集成测试,中等测试和测试。 单元集成测试运行得很快,所以我在自动构建中的每个构建配置中运行它们:Release / Debug,x86 / x64,linux / windows。 medium 测试需要一段时间才能运行,所以我只在 Release | x64 | windows 版本中运行它们。 大型测试作为开发辅助工具存在:它们永远不会在自动构建中运行。然后为了增加乐趣,我的功能只存在于x86 | windows中(它很复杂)。我用复杂的层次结构完成所有这些,CppUnit很乐意支持。但是,使用“release”,“debug”,“x86”等类别进行此操作会更好。

在CppUnit中,我的测试目前在Fixture类中。理想情况下,我希望能够使用类别标记这些灯具,然后我可以相应地进行过滤。

测试层次结构做的一件关键事情, 要做的事情,就是在一个灯具上有多个类别。

2 个答案:

答案 0 :(得分:3)

我不确定我理解这个问题。请允许我写一些伪代码,看看我是否理解:

class TestCategory : public CPPUNIT_NS::TestCase {

    CPPUNIT_TEST_SUITE_BEGIN(TestCategory);
    CPPUNIT_TEST(myTestFunction);
    CPPUNITT_TEST_SUITE_END();

protected:

    void myTestFunction() {}

}

您可以拥有 n 这些类的数量。主要是:

// headers omitted

CPPUNT_TEST_SUITE_REGISTRATION(TestCategory)
// more registrations here
CPPUNIT_TEST_SUITE_REGISTRATION(TestCategory_n_)

int main(int argc, char** argv) {

   // test runner steps
}

请原谅我迟钝,但是你在测试架构中寻找逻辑分区,是吗?如果是这样,您可以通过类对测试进行分组,并在主函数中根据需要包含它们。

帮助我理解。感谢。

答案 1 :(得分:2)

--run_test option in Boost.Test支持测试和/或套件名称的通配符匹配。我不完全确定匹配的灵活性如何,但是如果你要将类似标签的命名部分放入测试(--suite)名称中,你可以运行--run_test=suite_LongRunning*/*类似的东西。


我也偶然发现xUnit++ Attributes run可用于{{3}}个不同的类别。 (因为它是在NUnit之后建模的,所以这应该不奇怪。)