6

我目前正在使用 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。中等测试需要时间来运行,所以我只在Release|x64|windows构建中运行它们。大的测试作为开发辅助存在:它们永远不会在自动构建中运行。然后为了增加乐趣,我有只存在于 x86|windows 中的功能(这很复杂)。我用一个复杂的层次结构来完成这一切,CppUnit 很高兴地支持它。但是,使用“发布”、“调试”、“x86”等类别会更好。

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

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

4

2 回答 2

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
}

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

帮我理解。谢谢。

于 2013-02-05T03:49:55.583 回答
2

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


我还偶然发现了xUnit++,它具有可用于运行不同类别的属性。(由于它是仿照 NUnit 建模的,这应该不足为奇。)

于 2014-02-12T08:12:52.793 回答