1

我正在使用 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
4

1 回答 1

0

我发现了这个问题。我的 testrunner 动态链接到 Boost.Test。但是我的测试 dll 静态链接到 Boost。我将其更改为动态链接,现在一切正常。

于 2014-02-17T08:00:20.260 回答