提高.测试 在 dll 中使用 BOOST 测试用例和在 exe 中的运行器中出现问题

BOOST.TEST Trouble having BOOST test cases in a dll and runner in exe

本文关键字:运行 exe 问题 测试用例 dll 测试 提高 BOOST      更新时间:2023-10-16

我正在使用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。我将其更改为动态链接,现在一切正常。