正如标题所说,我希望从测试应用程序获取所有测试套件或测试用例(名称),在控制台中获取以太网或xml输出。 测试框架是增强测试库。
有没有选择来实现这一目标?我没有在文档中找到任何有用的东西。
答案 0 :(得分:3)
只有--list_content命令行选项,完全是出于此目的。
答案 1 :(得分:2)
使用global fixture可以在没有太多入侵的情况下完成此操作。假设您有一个显式或自动生成的包含main
的转换单元(cpp文件),您可以在提供某个命令行参数时拦截测试执行。然后,您可以使用自定义访问者遍历测试树,该访问者列出了所有可用的测试。这是一个小工作示例,它通过编译和链接文件main_test.cpp
,a.cpp
和b.cpp
来创建测试运行器:
<强> main_test.cpp 强>
#include <string>
#include <iostream>
// --- Boost Includes ---
#define BOOST_TEST_MODULE MyTestSuite
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>
using namespace boost::unit_test;
struct Visitor : test_tree_visitor
{
size_t level = 0;
void visit( test_case const& test )
{
std::string indentation( level, '.' );
std::cout << indentation << test.p_name << std::endl;
}
bool test_suite_start( test_suite const& suite )
{
std::string indentation( level, '.' );
level++;
std::cout << indentation << "Suite: " << suite.p_name << std::endl;
return true;
}
void test_suite_finish( test_suite const& suite )
{
level--;
}
};
struct GlobalFixture
{
GlobalFixture( )
{
int argc = framework::master_test_suite( ).argc;
for ( int i = 0; i < argc; i++ )
{
std::string argument( framework::master_test_suite( ).argv[i] );
if ( argument == "list" )
{
Visitor visitor;
traverse_test_tree( framework::master_test_suite( ), visitor );
exit( EXIT_SUCCESS );
}
}
}
};
BOOST_GLOBAL_FIXTURE( GlobalFixture )
<强> a.cpp 强>
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_SUITE ( TestA )
BOOST_AUTO_TEST_CASE ( TestFoo )
{
BOOST_CHECK(true);
}
BOOST_AUTO_TEST_CASE ( TestBar )
{
BOOST_CHECK(true);
}
BOOST_AUTO_TEST_SUITE_END() // TestA
<强> b.cpp 强>
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_SUITE ( TestB )
BOOST_AUTO_TEST_CASE ( TestFoo )
{
BOOST_CHECK(true);
}
BOOST_AUTO_TEST_CASE ( TestBar )
{
BOOST_CHECK(true);
}
BOOST_AUTO_TEST_SUITE_END() // TestA
调用没有任何参数的跑步者会导致
./somelib_testrunner1
Running 4 test cases...
*** No errors detected
传递上面定义的fixture中使用的参数list
会导致
Suite: MyTestSuite
.Suite: TestA
..TestFoo
..TestBar
.Suite: TestB
..TestFoo
..TestBar
答案 2 :(得分:1)
我担心没有实际运行测试就没有简单的方法。
即便如此,在没有触及代码的情况下我唯一想到的就是--log_level=test_suite
和某种解析脚本,它会找到&#34;进入测试套件&#34;,&#34;离开测试套件&#34;和&#34;进入测试用例&#34;消息(或解析当你放置--log_format=XML
时给出的xml,如果你手头有一个xml解析器)。
但即使这会使用您添加的BOOST_TEST_MESSAGE
来破坏日志,当然也会遇到错误和警告。
看看boost测试框架如何不仅仅是标头中定义的一堆宏,你当然可以自己添加功能,可能最简单的方法是添加另一种日志格式,只列出套件和测试,假设你是找到列表时运行测试很好。