【发布时间】:2009-07-01 04:10:50
【问题描述】:
之前我一直在碰壁,因为我在使用 c/c++ 时没有做任何测试类(而是有很多打印方法)。
在 c/c++ 代码中执行测试最常用的方法是什么? Java 的 JUnit 只在调试时给我留下了美好的回忆。
我知道在带有已定义调试头的代码中使用断言应该可以工作,但是没有更好的方法吗?
而且由于我打算将来制作测试课程,欢迎任何有用的提示。
【问题讨论】:
之前我一直在碰壁,因为我在使用 c/c++ 时没有做任何测试类(而是有很多打印方法)。
在 c/c++ 代码中执行测试最常用的方法是什么? Java 的 JUnit 只在调试时给我留下了美好的回忆。
我知道在带有已定义调试头的代码中使用断言应该可以工作,但是没有更好的方法吗?
而且由于我打算将来制作测试课程,欢迎任何有用的提示。
【问题讨论】:
我们使用Google Test 和它的伴侣Google Mock。效果很好,支持 JUnit 风格的 XML 输出,以便与 CruiseControl 等轻松集成。它也是完全跨平台的,根据我几个月前的研究,GMock 是唯一完全跨平台的 C++ 对象模拟框架.
【讨论】:
我们使用boost.Test。还有cppunit。
【讨论】:
【讨论】:
UnitTest++ 值得一看。与此处提到的其他一些框架相比,它缺少一些功能,但简单性很好——尤其是在您刚刚开始的时候。
我相信它是由 Noel Llopis 在写完http://gamesfromwithin.com/?p=29 中提到的文章后开发的。移植到多种不同的编译器/平台非常容易——如果需要针对 PC 以外的东西,无论是游戏机、嵌入式设备还是其他东西,这都很有用。
邮件列表已经安静了一段时间了,但每隔一段时间就会有问题、补丁和/或新版本,而且提出问题的人通常会很快得到答复。
【讨论】:
无耻插件:如果您面向 Windows 并使用 Visual Studio,请查看 cfix 和 cfix studio。
它也兼容 WinUnit。
【讨论】:
最新版本的 Visual Studio 有一些东西:
http://msdn.microsoft.com/en-us/library/ms243147(VS.80).aspx
【讨论】:
为什么不使用CppUnit?它是作为 JUnit 的一个端口创建的。
【讨论】:
人们严重过度设计的另一个问题。
以下是名义上的单元测试基础架构的粗略、非工作实现。使用 std::string 命名空间/类名构造 Test 并使用一致的命名方案来打印出哪个测试失败是有意义的。我只是使用一个单元测试模板,并有一些脚本可以找到以u 开头的所有可执行文件(每个类一个),依次运行它们并收集返回值。
struct Test
{
std::vector<(std::string)fptr*(void)> tests;
int run() const
{
int stat(0);
for (/* tests */)
{
std::string const res(test.run());
if (!res.empty())
{
std::cerr << res;
++stat;
}
}
return stat;
}
};
std::string test1()
{
std::ostringstream oss;
// do a bunch of stuff
// mark some of this code to be pulled into the class documentation
// conditional checks follow
if (fail)
{
oss << "fail: some reason" << std::endl;
}
// more checks
return oss.str();
}
int main(void)
{
Tests tests;
tests.push_back(test1);
tests.push_back(test2);
return tests.run();
}
【讨论】:
对于 Symbian,有 SymbianOSUnit:http://www.symbianosunit.co.uk/
【讨论】:
如果您使用的是 Windows,请查看:Limitations of using C++/CLI with NUnit 并在 http://en.wikipedia.org/wiki/Managed_Extensions_for_C%2B%2B 中编写测试。
还有:http://golios.blogspot.com/2008/12/using-nunit-with-c-part-2.html、http://golios.blogspot.com/2008/11/using-nunit-with-native-c.html
这将像 junit 一样工作只是,除了 nunit 在运行每个测试之前不会创建测试用例类的新实例。
【讨论】:
如果是 Windows 平台,您可以从这里尝试 MS 的 WinUnit。 Simplified Unit Testing for Native C++ Application
【讨论】:
尝试使用 Catch。 http://catch-lib.net
它易于使用和设置,并且对大多数人来说足够强大。
【讨论】:
2019 年:
【讨论】: