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

C++ 是否有任何广泛使用的C++;支持测试类别的单元测试框架?,c++,unit-testing,C++,Unit Testing,我目前正在使用CppUnit进行测试,但由于缺乏对概念的支持而感到沮丧有没有广泛使用的C++单元测试框架支持这个想法? < /P> 下面是一个直接来自NUnit文档的示例: namespace NUnit.Tests { using System; using NUnit.Framework; [TestFixture] [Category("LongRunning")] public class LongRunningTests { // ... } }

我目前正在使用CppUnit进行测试,但由于缺乏对概念的支持而感到沮丧<强>有没有广泛使用的C++单元测试框架支持这个想法?<强> < /P> 下面是一个直接来自NUnit文档的示例:

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

  [TestFixture]
  [Category("LongRunning")]
  public class LongRunningTests
  {
    // ...
  }
}
其思想是能够在不同的类别中对测试进行分组,并在指定的类别中执行测试,或者根据类别排除测试

我试过CppUnit、Boost.Test和googletest,它们都没有直接支持这个想法

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

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


测试层次结构不做的一件关键事情是在一个夹具上有多个类别,哪些类别可以做。

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

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
}
请原谅我的迟钝,但您正在测试体系结构中寻找逻辑分区,是吗?如果是这样,您可以通过类对测试进行分组,并根据需要将它们包括在主函数中

帮我理解。谢谢。

支持测试和/或套件名称的通配符匹配。我不完全确定匹配有多灵活,但如果要在测试(-suite)名称中添加类似于标记的命名部分,您可能可以运行
--run\u test=suite\u longlunning*/*
类似的程序



我还偶然发现了哪些可以用于不同的类别。(因为它是以NUnit为模型的,这也就不足为奇了。)

在CppUnit中,我使用子测试来表示类别。但是,没有与测试项关联的类别属性或属性。您可以使用宏包装器,例如围绕Boost.test或gtest使用
#define UnitTest
#define IntegrationTest
,并将这些宏符号传递到编译器的命令行,以便在不同类别之间进行选择。谢谢@Tyler,是的,你的答案是这样做的一种方法,这是可行的。我在OP中添加了一些关于我目前所做工作的信息。基本上,如果我能得到的话,我希望比现在有更多的灵活性。@Boinst我现在明白了。CppUnit不支持这样的概念,看起来您必须更新您的测试层次结构才能使“类别”工作。我有一个顶级的makefile,其中有几个目标,比如“大测试”、“小测试”、“单元测试”等等,这样您就可以根据需要编译和运行。另外,请查看一个持续集成服务器,例如
Hudson
,为您执行此任务。xUnit++属性似乎是我问题的答案谢谢!