C / C ++测试框架(如JUnit for java)

之前我一直在墙上撞到我的头,因为我在使用c / c ++时没有进行任何测试类(但是有很多打印方法)。

在c / c ++代码中执行测试的最常用方法是什么? Java的JUnit在调试时只留下了美好的回忆。

我知道在代码中使用带有定义的调试头的断言应该有效,但是没有更好的方法吗?

由于我打算将来进行测试课程,所以欢迎任何有用的提示。

我们使用Google Test及其配套的Google Mock 。 工作非常好,支持JUnit样式的XML输出,可以轻松地与CruiseControl等集成。它也是完全跨平台的,几个月前我的研究中,GMock是C ++ 唯一的完全跨平台对象模拟框架。

我们使用boost.Test 。 还有cppunit 。

UnitTest ++值得一看。 与这里提到的其他一些框架相比,它缺乏function,但简单性很好 – 特别是如果你刚开始的话。

我相信它是由Noel Llopis在撰写http://gamesfromwithin.com/?p=29中提到的文章后开发的。 移植到众多不同的编译器/平台非常容易 – 如果需要针对PC以外的其他东西,无论是游戏控制台,嵌入式设备还是其他设备,都非常有用。

邮件列表已经安静了一段时间,但每隔一段时间就有问题,补丁和/或新版本,提问的人通常会很快回答。

维基百科有很多用于C ++的unit testing框架和另一个C列表。

我在Windows和Linux下使用Qt ,它提供了一个自己的集成(但与其他单独的解决方案相比有点限制)测试框架。

它非常易于使用和快速学习 – 请参阅QTestLib

ciao,克里斯

无耻的插件:如果你的目标是Windows并使用Visual Studio,请查看cfix和cfix studio 。

它也与WinUnit兼容。

最新版本的Visual Studio有:

http://msdn.microsoft.com/en-us/library/ms243147(VS.80).aspx

为什么不使用CppUnit ? 它被创建为JUnit的一个端口。

人们严重过度工程的另一个问题。

以下是标称unit testing基础设施的顶级,粗略,非工作实现。 使用std::string命名空间/类名构造Test并使用一致的命名方案打印出哪个测试失败是有道理的。 我只使用一个unit testing模板,并有一些脚本可以找到所有以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,请查看: 使用NUnit使用C ++ / CLI的限制,并在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-本机c.html

这将像junit一样工作除非nunit在运行每个测试之前不创建测试用例类的新实例。

如果它适用于Windows平台,您可以从这里尝试MS的WinUnit。 本机C ++应用程序的简化unit testing

尝试使用Catch。 http://catch-lib.net

它使用和设置简单,function强大,适合大多数人。