【问题标题】:Running unit test with CppUnit on a dll在 dll 上使用 CppUnit 运行单元测试
【发布时间】:2013-03-29 08:59:55
【问题描述】:

我有一个 Visual Studio 项目,其中包含我们的一个模块的 CppUnit 测试用例。该项目在构建时会创建一个 dll(类似于 ModuleUnitTest.dll)。我没有得到如何运行这些测试? CppUnit 中是否有任何现成的存根可以从这个 dll 中读取并运行测试?还是我必须自己写?由于这些单元测试用例很早就可以使用并且没有存根代码,我相信我不需要编写一个。谁能告诉我如何从 dll 执行测试?

【问题讨论】:

  • 我认为该 DLL 中没有 rundll32-complaint 入口点?
  • @WhozCraig:你是说main 还是_tmain?没有
  • 您需要将该 dll 链接到您的 cppunit 项目构建中,并在您的测试用例中访问它们

标签: c++ unit-testing cppunit


【解决方案1】:

在您的测试代码中的某个地方,您需要一个测试运行器。标准答案是创建一个像 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 代码的项目依赖。

【讨论】:

    【解决方案2】:

    Youse Test Explorer Visual Studio 的浮动面板。

    【讨论】:

      猜你喜欢
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多