Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在dll上使用CppUnit运行单元测试_C++_Unit Testing_Cppunit - Fatal编程技术网

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

C++ 在dll上使用CppUnit运行单元测试,c++,unit-testing,cppunit,C++,Unit Testing,Cppunit,我有一个VisualStudio项目,其中有一个模块的单元测试用例。此项目在构建时会创建一个dll(类似于ModuleUnitTest.dll)。我不明白如何运行这些测试?CppUnit中是否有任何现成的存根可以从该dll读取并运行测试?还是我必须自己写?由于这些单元测试用例很长时间以来都是可用的,并且没有存根代码,所以我相信我不需要编写存根代码。有人能告诉我如何从dll执行测试吗?在您的测试代码中,您需要一个测试运行程序。标准答案是创建一个类似CppUnitTestMain.cpp的文件,并添

我有一个VisualStudio项目,其中有一个模块的单元测试用例。此项目在构建时会创建一个dll(类似于ModuleUnitTest.dll)。我不明白如何运行这些测试?CppUnit中是否有任何现成的存根可以从该dll读取并运行测试?还是我必须自己写?由于这些单元测试用例很长时间以来都是可用的,并且没有存根代码,所以我相信我不需要编写存根代码。有人能告诉我如何从dll执行测试吗?

在您的测试代码中,您需要一个测试运行程序。标准答案是创建一个类似CppUnitTestMain.cpp的文件,并添加类似以下内容的代码(直接来自cppunit文档):

#包括
#包括
int main(int argc,字符**argv)
{
CppUnit::TextUi::TestRunner;
CppUnit::TestFactoryRegistry®istry=CppUnit::TestFactoryRegistry::getRegistry();
runner.addTest(registry.makeTest());
bool wasuccessful=runner.run(“,false);
返回成功;
}
因为如果这是一个单独编译的项目,TestRegistry信息就不可用,所以我认为您最终应该使用LoadLibrary进行一些编码以引入DLL,然后从中获取信息以添加到测试运行程序。不是不可能,但这是你必须自己解决的工作

但是手动处理测试注册表是额外的工作,宏应该可以轻松地为您处理这些工作。这就引出了我要问的一个更大的问题,这就是为什么您的测试目前位于一个DLL项目中?如果他们没有被处决,你会怎么处理他们?是否有其他可执行文件可以加载和运行它们


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

YouseTest ExplorerVisual Studio的浮动面板。

我想在该DLL中没有RundL32投诉入口点?@WhozCraig:你是说
main
还是
\tmain
?您需要将该dll链接到您的CPPFUnit项目构建中,并在测试用例中访问它们
#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;
}