所以,我已经开始使用升压单元测试了。 当我尝试构建一个创建类实例的简单测试时,我得到一个编译错误。没有该类的实例,它可以正常工作。
编译错误消息是:
/src/test/WTFomgFail_test.cpp: In member function ‘void WTFomgFail::defaultConstructor::test_method()’:
/src/test/WTFomgFail_test.cpp:20: error: expected primary-expression before ‘obj’
/src/test/WTFomgFail_test.cpp:20: error: expected `;' before ‘obj’
#include "WTFomgFail.hpp"
#define BOOST_TEST_MODULE WTFomgFail
#define BOOST_TEST_MAIN
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_SUITE(WTFomgFail)
BOOST_AUTO_TEST_CASE( defaultConstructor )
{
WTFomgFail obj = WTFomgFail();
BOOST_MESSAGE("wow, you did it");
}
BOOST_AUTO_TEST_SUITE_END()
#ifndef WTFOMGFAIL_HPP_
#define WTFOMGFAIL_HPP_
class WTFomgFail
{
public:
WTFomgFail();
~WTFomgFail();
};
#endif /* WTFOMGFAIL_HPP_ */
#include "WTFomgFail.hpp"
WTFomgFail::WTFomgFail()
{
}
WTFomgFail::~WTFomgFail()
{
}
如果我将BOOST_AUTO_TEST_SUITE(WTFomgFail)
更改为其他内容,则错误消失,例如BOOST_AUTO_TEST_SUITE(OMGreally)
。
此外,将#define BOOST_TEST_MODULE OMGreally
与BOOST_AUTO_TEST_SUITE(OMGreally)
一起使用时,我不会收到错误。
所以,我的问题是当使用boost时,UTF命名模块,test_suite,并且明确禁止同一个类?
答案 0 :(得分:5)
我知道我迟到了这个问题,但我偶然发现它并且看起来很孤单......
要理解此限制,您必须了解Boost测试最初的工作原理。 (它仍然可以这样工作,但当时没有BOOST_AUTO_...
个宏,你有这样做。)
来自docs:
class test_class {
public:
void test_method1()
{
BOOST_CHECK( true /* test assertion */ );
}
void test_method2()
{
BOOST_CHECK( false /* test assertion */ );
}
};
//____________________________________________________________________________//
test_suite*
init_unit_test_suite( int argc, char* argv[] )
{
boost::shared_ptr<test_class> tester( new test_class );
framework::master_test_suite().
add( BOOST_TEST_CASE( boost::bind( &test_class::test_method1, tester )));
framework::master_test_suite().
add( BOOST_TEST_CASE( boost::bind( &test_class::test_method2, tester )));
return 0;
}
这有点麻烦,因为每次添加测试函数时,都必须在两个单独的位置更改代码(函数的定义和使用测试套件注册)。注册也有些不直观。
这就是为什么他们推出了BOOST_AUTO_TEST_SUITE
和BOOST_AUTO_TEST_CASE
,为您做这件事。
您传递给BOOST_AUTO_TEST_SUITE
的参数当然是类的名称(上面的test_class
)。 BOOST_AUTO_TEST_CASE
的参数是测试函数的名称(上面为test_method1()
和test_method2()
)。
所以不,那些(当然)可能与您正在测试的类和功能不同。您可以为此使用名称空间,但我个人更喜欢将类名称加上Tu
(如果您没有加入CamelCase命名,则为_tu
),并将其用于测试套件。< / p>
我希望这会有所帮助。