我正在尝试开始单元测试。我正在查看一些 C++ 框架并想尝试 Boost.Test。文档看起来非常详尽,而且有点让人不知所措,尤其是对单元测试新手来说。所以这是我想要的情况:
假设我有 2 个类,Foo
和 Bar
。我想为 Foo
编写一套测试,为 Bar
编写一套测试,最好是在不同的文件中。我只想在使用命令行参数运行程序时运行测试。所以我的 main()
应该是这样的:
int main(int argc, const char* argv[])
{
if (argc == 1 && strcmp(argv[0], "-test") == 0)
run_all_tests();
else
return program_main(argc, argv);
}
我认为 test_foo.cpp
应该是这样的:
#include "foo.hpp"
#define BOOST_TEST_MODULE Foo test
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_SUITE( Foo_Test )
BOOST_AUTO_TEST_CASE( Foo1 )
{
Foo f;
BOOST_CHECK( f.isValid() );
}
BOOST_AUTO_TEST_CASE( Foo2 )
{
Foo f;
BOOST_CHECK( f.baz() == 5 );
}
BOOST_AUTO_TEST_SUITE_END()
但是,我不知道 (1) 运行测试的实际命令是什么,以及 (2) 如何实际告诉库我要运行每个测试。
那么,谁有使用过 Boost.Test 的经验?有人能帮忙详细点吗?非常感谢。
最佳答案
在你的test_foo.cpp
,宏在中添加测试套件和测试用例
到全局列表:master_testsuite
, 这是所有测试的根
节点。您只需要编译所有测试文件,例如
test_foo.cpp
, test_boo.cpp
和一个运行者,然后将它们全部链接到
可执行文件。
函数unit_test_main
用于运行 master_testsuite
中的测试.
boost::unit_test::unit_test_main(
&init_unit_test,
argc,
argv
)
基于您在包含之前定义的宏
<boost/test/unit_test.h>
, Boost.Test 可能已经生成了 main
为您服务。[1]生成的 main
简单地调用
unit_test_main
与 argc
和 argv
在main
.建议
使用 unit_test_main
因为它可以处理一些控制台参数,
喜欢run test by name .
unit_test_main
的第一个参数是一个钩子(Hook)。根据
BOOST_TEST_ALTERNATIVE_INIT_API
,它有不同的定义。
#ifdef BOOST_TEST_ALTERNATIVE_INIT_API
typedef bool (*init_unit_test_func)();
#else
typedef test_suite* (*init_unit_test_func)( int, char* [] );
#endif
您可以自定义 master_testsuite
在钩子(Hook)里。在第二
形式,返回值是新的主测试套件。
[1] 如果BOOST_TEST_MAIN
和 BOOST_TEST_MAIN
被定义,但是
BOOST_TEST_NO_MAIN
不是。
关于c++ - 帮助开始使用 Boost.Test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/963158/