如何定义Boosts测试以在代码中运行?

时间:2015-03-11 15:48:20

标签: c++ unit-testing boost boost-test

使用Boost.Test我试图在代码中指定BOOST_TESTS_TO_RUN环境变量,这样只会执行一些测试。使用#define BOOST_TESTS_TO_RUN

命令行参数--run_tests正常工作。但我想通过环境变量来实现它,以便有一个main.cpp,我可以在其中选择不同的套件和模块。

但我不确定如何指定它,或者在哪里。应该包括提升之前吗?如果我有不同的cpp文件和不同的测试套件怎么办?

module_A.cpp

#include "SomeHeader.h"
#define BOOST_TESTS_TO_RUN // ??
#include "boost/test/unit_test.hpp"
BOOST_AUTO_TEST_SUITE( moduleA );
BOOST_AUTO_TEST_CASE( test1 ){}
BOOST_AUTO_TEST_CASE( test2 ){}
BOOST_AUTO_TEST_CASE( test3 ){}
BOOST_AUTO_TEST_SUITE_END();

2 个答案:

答案 0 :(得分:0)

Boost UTF不是那样设计的。如果您确实希望从代码中启用/禁用某些测试,则可以对所有测试使用手动注册并定义主测试套件,您需要手动注册所有测试。请参阅master-test-suite文档和有关手动测试注册的其他页面。然后,您可以评论某些您不想运行的测试。

但是,我不推荐这种方法。忘记测试太容易了,因此难以维护。对于调试,您可以轻松地手动运行测试可执行文件并使用命令行参数。

答案 1 :(得分:0)

检查--run_test的新文档,该文档解释了环境变量BOOST_TEST_RUN_FILTERS可以用于此目的(也存在于上一版本的boost中,但环境变量的使用情况不太明显。 DOC)。

基本上,您只使用所有测试(默认情况下启用)编译main.cpp一次,然后从BOOST_TEST_RUN_FILTERS环境变量中选择性地运行它们。

我没有看到这样做的问题,特别是wrt。 boost.test的设计。