C++ 是否有任何广泛使用的C++;支持测试类别的单元测试框架?
我目前正在使用CppUnit进行测试,但由于缺乏对概念的支持而感到沮丧<强>有没有广泛使用的C++单元测试框架支持这个想法?<强> < /P> 下面是一个直接来自NUnit文档的示例: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 { // ... } }
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++属性似乎是我问题的答案谢谢!