在dll上使用CppUnit运行单元测试

时间:2013-03-29 08:59:55

标签: c++ unit-testing cppunit

我有一个visual studio项目,其中包含一个模块的CppUnit测试用例。构建此项目时会创建一个dll(像ModuleUnitTest.dll这样的东西)。我不知道如何运行这些测试? CppUnit中是否有可用于读取此dll并运行测试的现成存根?或者我必须自己写?由于这些单元测试用例很长时间没有,并且没有存根代码,我相信我不需要写一个。有人可以告诉我如何从dll执行测试?

2 个答案:

答案 0 :(得分:0)

在测试代码中的某个地方,您需要一个测试运行器。标准答案是创建一个像CppUnitTestMain.cpp这样的文件并添加类似这样的代码(直接来自cppunit文档):

#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TestRunner.h>

int main( int argc, char **argv)
{
  CppUnit::TextUi::TestRunner runner;
  CppUnit::TestFactoryRegistry &registry = CppUnit::TestFactoryRegistry::getRegistry();
  runner.addTest( registry.makeTest() );
  bool wasSuccessful = runner.run( "", false );
  return wasSuccessful;
}

因为如果这是一个单独编译的项目,TestRegistry信息不可用,我想你最终会使用LoadLibrary进行一些编码来引入DLL,然后从中获取信息以添加到测试运行器。并非不可能,但是你需要自己解决这个问题。

但是手动处理测试注册表是宏应该为您轻松处理的额外工作。这导致了我要问的更大的问题,这就是为什么你的测试目前存放在DLL项目中?如果他们没有被执行,你在做什么?是否有其他可执行文件加载并运行它们可以利用它们?

我们通常使用的答案是让测试项目本身是可执行文件,而不是DLL,并包含所有测试代码。它通过链接器附加依赖项设置静态链接业务逻辑:$(SolutionDir)businessProject \ debug \ obj * .OBJ文件,在解决方案中,我们在正在构建的主要businessProject代码上添加项目依赖项。

答案 1 :(得分:0)

Youse 测试资源管理器 Visual Studio的浮动面板。