【问题标题】:Unit Testing .cpp How-To [closed]单元测试 .c++ How-To [关闭]
【发布时间】:2010-07-31 19:15:08
【问题描述】:

好的。我已经用 C++ 完成了屏幕抓取程序。现在我如何对 .cpp 进行单元测试? 我从哪里开始?

【问题讨论】:

  • google 是老派,现在您在 stackoverflow 上询问,人们会为您搜索 - 它称为委托(它甚至是一种设计模式)。
  • 不要选择 CppUnit,尽管它的名字很吸引人。探索最新的,例如 Google Test 或 UnitTest++。
  • 我只是希望有人将单元测试分解为更简单的术语。为什么是框架?单元测试只是另一个测试我的程序的程序吗?
  • 是的,单元测试框架是支持代码,可帮助您编写另一个程序来测试您的代码。它节省了大量的时间和精力。请参阅下面的视频。

标签: c++ unit-testing testing


【解决方案1】:

有几个单元测试框架可以帮助您测试代码。

查看: Google 测试(Google C++ 测试框架),可以在http://code.google.com/p/googletest/找到

Google Mock(Google C++ 模拟框架)http://code.google.com/p/googlemock/,它将通过为您的类创建模拟对象来帮助您检查应用程序的流程。

(您应该在 http://en.wikipedia.org/wiki/Mock_object 阅读有关 Mock 对象的信息)

如果 GoogleTest 框架不能满足您的需求,您还有另一个很棒的替代方案,称为 CxxTest (http://cxxtest.tigris.org/)。

祝你好运!

塔尔。

【讨论】:

  • 听说UnitTest++也很不错:unittest-cpp.sourceforge.net
  • 谢谢塔尔!我正在使用 CPPUNIT,因为它已经在我的 netbeans 中了。
【解决方案2】:

本质上,您需要做的是获取您要测试的模块/类并将其与系统的其余部分隔离,模拟(伪造)它与任何外部类/API 的所有交互,并验证它确实做到了它应该做什么。

通常您使用“模拟对象”进行此模拟。您可以设计模拟对象的行为来为您的被测系统(模块/类)(SUT)执行不同的操作条件。您可以使用现有的模拟对象框架,也可以简单地“滚动自己的”模拟对象,方法是创建实现 SUT 使用的所有接口的对象或函数。

您必须弄清楚如何将模拟对象注入您的 SUT。例如,如果您的 SUT 有一个成员变量对象实例,也许您可​​以创建 SUT 的子类并添加一个方法“SetMemberObj(aMockInstance)”来安装模拟对象。如果您的 SUT 使用全局函数,也许您可​​以创建具有相同签名的函数,而不是将您的测试应用与包含真实函数的 .lib 链接,这样您的 SUT 将改为调用假函数。

您还必须决定如何验证 SUT 的行为;在简单的情况下,您可以检查方法的返回码,而在更复杂的情况下,您需要查询模拟对象以查看 SUT 是如何调用它们的。

您可能还面临着弄清楚如何实际调用您的 SUT 的挑战。我通常做的是制作一个控制台 .exe,它以各种方式实例化和驱动 SUT,通过标准输出和/或返回码指示任何错误。单元测试框架对此非常有帮助,但并非完全必要。

【讨论】:

    【解决方案3】:

    CppUnit 是用于单元测试的 JUnit 的 C++ 等效项。

    【讨论】:

    • 不过挺别扭的。原作者继续创建一个新系统,该系统使用宏来消除定义如此多管道的需要。这种方法正在被复制并用于更新的 C++ 单元测试框架。
    • 是的,我现在正在使用 cppUnit
    【解决方案4】:

    有很多可用的 C++ 单元测试框架,因此选择一个可能相当令人生畏。 Here 是一个非常好的系列博客文章,评估了多个框架,并包含大量 C++ 单元测试的实际示例。

    【讨论】:

    • 实际上并不是这种比较的忠实拥护者,因为它太旧了。他对现有框架的一些抱怨在随后的几年中得到了解决(例如 boost::test 以前缺乏套件)。
    【解决方案5】:

    以下是演示 C++ 测试驱动开发的教学视频:http://www.vimeo.com/album/254486

    【讨论】:

    • 有一个免费的开放单元测试框架,只需要包含Test.hpp,所以没有makefile更改,也没有链接器问题。它还支持夹具(安装和拆卸)、泄漏检测和性能测试。 gitlab.com/cppocl/unit_test_framework
    猜你喜欢
    • 2011-01-03
    • 2010-09-09
    • 2014-03-20
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 2010-09-08
    • 2011-11-07
    相关资源
    最近更新 更多