提高.测试 在 dll 中使用 BOOST 测试用例和在 exe 中的运行器中出现问题
BOOST.TEST Trouble having BOOST test cases in a dll and runner in exe
我正在使用Boost.Test进行单元测试。我希望将所有测试代码放在单独的 dll 中,这样测试代码就不会发布,我的生产代码也不会膨胀。
为此,我考虑在 dll 中使用手动测试用例并让 dll 导出一个方法
// Test cases DLL code
// exported method
__declspec(dllexport) test_suite *GetTestSuite()
{
test_suite* ts1 = BOOST_TEST_SUITE( "manual_test_suite1" );
ts1->add( BOOST_TEST_CASE( &manual_test_case1 ) );
ts1->add( BOOST_TEST_CASE( &manual_test_case2 ) );
return ts1;
}
从我的测试运行器中,我可以在我的init_unit_test_suite中调用此方法为
bool init_unit_test_suite()
{
test_suite * ts = GetTestSuite();
framework::master_test_suite().add( ts );
return true;
}
但是测试用例不会被拾取。但是,我在本地测试运行器中的测试用例正在被拾取。
我正在与 BOOST 静态库链接,并通过定义拥有自己的 main
// Test runner app code
#define BOOST_TEST_NO_LIB
#define BOOST_TEST_NO_MAIN
在我的测试运行器中。
这种组合有什么问题?如何在单独的 dll 中实现测试用例的隔离,并拥有一个外部测试运行程序?
编辑:我用来调用测试用例的命令行是:
char *myargv[] = {"", "--log_level=test_suite", "report_level=detailed", "output_format=xml", "--run_test=manual_test_suite1"};
argc = _countof(myargv);
unit_test_main((init_unit_test_func) &init_unit_test_suite, argc, myargv );
我在上述命令行上遇到的错误是:
Test setup error: no test cases matching filter
我发现了这个问题。我的测试运行器动态链接到Boost.Test。但是我的测试 dll 静态链接到 Boost。我将其更改为动态链接,现在一切正常。
相关文章:
- 使用参数在 C# 的C++上运行.exe
- C++程序编译器在使用g++命令编译后自动运行exe文件
- 从 CMD 运行.exe并自动向其传递参数
- 如何使用管理员权限运行 EXE
- 操作系统如何决定如何运行.exe
- 在不同的计算机上运行.exe文件.(视觉工作室)
- 在 Windows 命令行中运行.exe在使用 2 种相同方式执行时会产生不同的输出
- 在Visual Studio 2017中使用Qt库的CMake项目:运行exe时找不到Qt dll
- 使用 qprocess 运行.exe
- 运行EXE形成另一个EXE并传递参数
- 运行 exe - C++ 时找不到入口点
- 在服用 PATH C++后运行.exe
- 在 Node.JS 中运行.EXE
- 运行.exe的 main(),作为.dll的一部分
- 在win2k3上运行.exe时发生"The procedure entry point GetErrorMode could not be located in the dynamic link l
- 在另一台计算机上运行.exe文件时"Missing MSCVP140.dll"和"Missing VCRUNTIME140.dll"
- 在Linux中运行exe
- 从另一个 exe 运行 Exe
- 如何编译项目后不运行exe文件
- 如何在任何Windows计算机上运行.exe文件