我正在使用 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 静态库链接并通过定义拥有自己的主库
// 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