有没有一本好书或在线网站讨论 CppUnit 的使用,适合初学者?
5 回答
当你开始使用单元测试时,不要以 100% 的覆盖率为目标——那样会很疯狂。
寻找涵盖类中的所有主要方法(低悬的果实)。
当我开始单元测试(通过UnitTest++)时,我进行了全面覆盖,制作了应该是私有保护的方法,然后使用包装类来测试它们。接缝功能,所以我可以测试更接近金属的类。
一本关于单元测试的好书是《有效地使用遗留代码》,尽管它的名字也谈到了绿色领域的开发,但它写得很好,并且有很好的例子可供引导。
更新:也不要太担心在编写测试时一开始就涵盖每一种可能性。你会错过一些东西。我曾经有一个测试通过,但实时代码会在该函数中崩溃。通过测试运行输入显示出了什么问题,并允许我重写该函数,使其通过所有测试。在客户(对我来说很不幸)发现错误之前,最初的测试已经保持了大约 7 或 8 个月。
单元测试允许单独测试类,一次一种方法。
基本上,一个测试用例会创建一个正在测试的类的实例及其所依赖的类,调用一个方法并使用断言验证该方法是否按预期工作。
实现单元测试的一个好方法是测试驱动开发(TDD),其中单元测试是在代码之前编写的。虽然这听起来很奇怪,但这允许获得可测试(和测试)的代码。如果代码是先编写的,那么它可能不容易测试。
TDD流程如下:
红色:编写失败的测试绿色:编写足够的代码以使其通过重构:清理代码,删除重复
我不确定 CppUnit 是不是使用最广泛的。它是 jUnit(Java 框架)的一个移植版,但它非常重;存在简化版本:CppUnitLite、NanoCppUnit 以及 Cxxtest、Boost.Test 和 TUT,请参阅Wikipedia 上的此列表。如果你不依赖 CppUnit,有一篇文章比较它们。
我求助于“灵感”的书是 Michael Feathers 的《有效地使用遗留代码》。他是 CppUnit 的作者,写这本书是为了帮助将单元测试添加到一个大型遗留项目中。如果您刚刚开始一个新项目,它可能不会对您有太大帮助,但如果您尝试将单元测试纳入一个旧项目,他有很多好主意。
尝试重构现有项目的真正问题是让您的管理层继续前进。对他们来说,如果没有感知到的好处(没有新功能、更改代码的风险),他们可能会认为不值得为此付出代价。您必须努力向他们推销真正的好处(提高质量、易于添加新代码等),最终他们可能会认为这不值得。
我刚刚学习了 Gerard Meszaros 的 xUnit 测试模式。它实际上是昨天到的,所以我只通读了前几章,还不能以一种或另一种方式完全推荐它。但到目前为止,它已经为作者的自动化单元测试哲学提供了合理的建议,而这可能正是您正在寻找的东西。