0

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

4

2 回答 2

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 代码的项目依赖项。

于 2013-03-29T14:19:44.780 回答
0

Visual Studio 的Youse Test Explorer浮动面板。

于 2015-07-18T17:59:15.827 回答