使用CPPUnit对旧版C ++代码进行单元测试

时间:2011-07-21 14:53:50

标签: c++ unit-testing cppunit

我的任务是管理用vc ++ 6.0编写的大型代码库,我需要开始构建部分代码的单元测试。我已经设置了CPPUnit,它适用于我的项目DLL,我面临的问题如下。遗留应用程序由10个静态库和一个包含99%代码的巨大可执行MFC应用程序组成。我的单元测试框架在同一工作区内的另一个项目中运行,并将测试10个库没有问题,所有包含和引用都可以,当我尝试对大型MFC应用程序执行相同操作时,我得到链接器错误,因为我没有应用程序的DLL。有没有办法对应用程序进行单元测试,而无需将测试代码直接放在应用程序中。

5 个答案:

答案 0 :(得分:1)

我对单元测试的经验通常恰恰相反。为您的测试创建一个项目,然后从其他项目中导入代码。

您可能无法链接到MFC应用程序,因为您的功能未导出。它们存在,但与DLL不同,无意与其他应用程序通信。

答案 1 :(得分:1)

你应该继续:

  1. 您有一个引用库的测试应用程序。
  2. 您有一个主应用程序也引用了这些库。
  3. 将代码从主应用程序移动到现有库中,或者最好将代码移动到新库中。然后,您的测试应用程序可以访问更多代码而无需引用该应用程序。

    当你完成应用程序的源包含一个定义main()的模块和库中由测试应用程序测试的所有其他内容时,你就知道了。

答案 2 :(得分:0)

我知道无法链接可执行文件。通过将业务逻辑移动到DLL并将应用程序保留为"前端"来重构代码。将是最明显的解决方案。但是,由于它是遗留代码,因此为了单元测试而简单地复制代码可能更合适。这并不理想,因为它是一个MFC应用程序可能并不容易。

答案 3 :(得分:0)

要测试您的主应用程序,您可以设置一个测试项目,其中包含您要测试的源文件 - 不确定使用VC6实现它是多么容易,但是没有它,但是在VS2005及更高版本中这是非常直截了当。

因此,在您的解决方案中,您最终得到的结构如下:

MyLegacySystem.sln
  MyApplication.proj
    Main.cpp
    BusinessRules.cpp
  MyApplicationUnitTests.proj
    UnitTestsMain.cpp
    BusinessRules.cpp
    BusinessRulesTests.cpp

如果出于某种原因无法在2个项目中包含源文件,可以通过调用预处理器魔法将源代码放入测试项目中:

BusinessRulesStub.cpp:
#include "..\src\BusinessRules.cpp"

但是,这实际上是一个临时修复。正如已经建议的那样,最终应将大部分代码提取到单独的库中。

答案 4 :(得分:0)

如果您无法重构项目以将业务逻辑移动到新的静态库中,请尝试将测试项目与项目的中间对象文件链接,您可以在BigProject \ debug或BigProject \ debug \ obj中找到它们。您无法链接到您发现的.EXE。

这与Chad建议的复制过程实现了相同的结果,同时避免了源代码的实际重复,这将是一件非常糟糕的事情。