我正在使用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静态lib并拥有自己的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
答案 0 :(得分:0)
我发现了这个问题。我的测试人员动态链接到Boost.Test。但我的测试dll静态链接到Boost。我将其更改为动态链接,现在一切正常。