2008-09-18 37 views
35

我坚信使用单元测试是构建大型多平台应用程序的一部分。我们目前正在计划在单独的项目中进行单元测试。这有利于保持我们的代码基础清洁。不过,我认为这会将测试代码与实施单元分开。你对这种方法有什么看法?有没有像C++应用程序的JUnit这样的工具?如何在大型C++项目中实现单元测试?

+0

有一个刚刚被问到的非常类似的问题。看看[CppUnit](http://cppunit.sourceforge.net),[CppUnitLite](http://www.objectmentor.com/resources/downloads.html)和“[使用遗留代码有效工作](http:/ /www.amazon.co.uk/Working-Effectively-Legacy-Robert-Martin/dp/0131177052)“(全部由Michael Feathers – 2008-09-18 11:20:54

回答

15

有许多测试单元frameforks为C++。 CppUnit肯定不是我会选择的(至少在它的稳定版本1.x中,因为它缺少很多测试,并且需要大量的冗余代码行)。 到目前为止,我的首选框架是CxxTest,我计划在某天评估Fructose

任何方式,也有一些 “文件” 是评价C++ TU框架:

+0

与JUnit不同,更适合C++:[CATCH](https://github.com/philsquared/Catch)。 – 2016-02-03 09:52:50

11

这是一个合理的方法。

我已经都与UnitTest++Boost.Test

我已经看了CppUnit的很好的效果,但对我来说,感觉更像是JUnit的东西不是一些针对C++的转换。

更新:这几天我更喜欢使用Catch。我发现它是有效和简单的使用。

+3

[doctest](https://github.com/onqtam/doctest)是我重新实现注重编译速度 - 检出[FAQ](https://github.com/onqtam/doctest/blob/master/doc/markdown/faq.md#how-is-doctest-different-from-catch )看他们在哪些方面不同 – onqtam 2016-10-10 19:43:54

1

CppUnit的是Junit的用于C++应用 http://cppunit.sourceforge.net/cppunit-wiki

个人的直接等同物,我创建在一个不同的项目的单元测试,并创建了内置所有的单元测试和依赖源代码单独生成配置。在某些情况下,我想测试一个类的私有成员函数,所以我使Test类成为要测试的对象的一个​​朋友类,但是当通过预处理器声明构建“非测试”配置时隐藏了朋友声明。

但是我最终做了这些编码体操,因为我在将测试集成到遗留代码中。如果您开始进行单元测试,更好的设计可能很简单。

1

您可以为该库的子目录中源树中的每个库创建单元测试项目。您最终会为每个库提供一个测试驱动程序应用程序,这使得运行一套测试变得更加容易。通过将它们放在一个子目录中,它可以保持代码基本清洁,但也会使测试接近代码。

可以轻松编写脚本来运行源代码树中的所有测试套件并收集结果。

我已经使用原始CppUnit的定制版本多年,并取得了巨大成功,但现在还有其他替代方案。 GoogleTest看起来很有趣。

1

我认为你的单元测试的正确路径和它的一个伟大的计划,以提高您的产品的可靠性。

虽然在将应用程序转换到不同的平台或甚至不同的操作系统时,单元测试并不能解决所有的问题。原因在于,流程单元测试会在您的应用程序中发现错误。它只是简单地将尽可能多的输入引入系统,并等待另一端的结果。就像让一只猴子不停地敲击键盘并观察结果一样(Beta测试者)。

要进入下一步,通过良好的单元测试,您需要专注于您的应用程序的内部设计。我发现的最佳方法是使用称为“合同编程”或“按合同设计”的设计模式或设计过程。另一本对于在你的核心设计中构建可靠性非常有帮助的书是。

调试开发过程:保持专注,打船日期和建立实体团队的实用策略。

在我们的开发团队中,我们仔细研究了我们认为是程序员错误,开发人员错误,设计错误以及如何使用单元测试以及通过DBC构建软件包的可靠性以及遵循建议调试开发过程。

1

CxxTest也值得一看,为C++轻量级,易于使用的跨平台JUnit/CppUnit/xUnit-like框架。我们觉得很简单的添加和开发测试

Aeryn是另一个C++测试框架值得一看

2

我使用单元测试++。测试在一个单独的项目中,但实际的测试与实际的代码交织在一起。它们存在于被测部分下的文件夹中。 即:
MyProject的\ SRC \ < - 实际应用
MyProject的源的\ src \测试< - 测试的源
如果您有嵌套的文件夹(谁不),那么他们也会有自己的拥有\测试子目录。

+0

我们也这样做,我们的构建系统会自动构建测试EXE的代码可以在任何unittest源文件夹下找到。 – 2008-09-29 12:24:15

3

您应该将您的基本代码分隔到共享(动态)库,然后为此库编写单元测试的主要部分。

两年前(2008)我参与了Linux基金会部署的大型LSB Infrastructure项目。该项目的目标之一是为Linux核心库编写40.000函数的单元测试。在该项目的上下文中,我们创建了AZOV technology和基本工具API Sanity Autotest,以便自动生成所有测试。您可以尝试使用此工具为您的基本库生成单元测试。

相关问题