我目前正在使用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类中。理想情况下,我希望能够使用类别标记这些灯具,然后我可以相应地进行过滤。
测试层次结构不做的一件关键事情, 要做的事情,就是在一个灯具上有多个类别。
答案 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之后建模的,所以这应该不奇怪。)