【发布时间】:2013-02-05 02:05:22
【问题描述】:
我目前正在使用 CppUnit 进行测试,但对缺乏对 Categories 概念的支持感到沮丧。 是否有任何广泛使用的 C++ 单元测试框架支持这个想法?
这是直接来自 NUnit 文档的示例:
namespace NUnit.Tests
{
using System;
using NUnit.Framework;
[TestFixture]
[Category("LongRunning")]
public class LongRunningTests
{
// ...
}
}
这个想法是能够将测试分组到不同的类别中,并在指定的类别中执行测试,或者可能根据它们的类别排除测试。
我尝试过 CppUnit、Boost.Test 和 Google Test,都没有直接支持这个想法。
例如,我有 unit 测试、integration 测试、medium 测试和 large 测试。 unit 和 integration 测试运行很快,所以我在自动构建的每个构建配置中运行它们:Release/Debug、x86/x64、linux/windows。 medium 测试需要时间来运行,所以我只在 Release|x64|windows 构建中运行它们。 大型 测试作为开发辅助工具存在:它们永远不会在自动构建中运行。然后为了增加乐趣,我有只存在于 x86|windows 中的功能(这很复杂)。我用一个复杂的层次结构来完成这一切,CppUnit 很高兴地支持它。但是,使用“release”、“debug”、“x86”等类别会更好。
在 CppUnit 中,我的测试目前在 Fixture 类中。理想情况下,我希望能够用类别标记这些装置,然后我可以进行相应的过滤。
一个测试层次结构不做的一个关键的事情,类别会做,是在一个单一的夹具上有多个类别。
【问题讨论】:
-
在 CppUnit 中,我使用子测试来表示类别。但是,没有与测试项目关联的类别属性或属性。
-
您可以使用诸如
#define UnitTest和#define IntegrationTest之类的宏包装器,例如Boost.Test 或 gtest 并将这些宏符号传递给编译器的命令行,以便在不同类别之间进行选择。
标签: c++ unit-testing