所以,我开始使用 boost 单元测试。
当我尝试构建一个创建类实例的简单测试时,我收到一个编译错误。它在没有类实例的情况下工作正常。
编译错误信息是:
/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’
WTFomgFail_test.cpp:
#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()
WTFomgFail.hpp:
#ifndef WTFOMGFAIL_HPP_
#define WTFOMGFAIL_HPP_
class WTFomgFail
{
public:
WTFomgFail();
~WTFomgFail();
};
#endif /* WTFOMGFAIL_HPP_ */
WTFomgFail.cpp:
#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 和 class 明确禁止相同的东西?
最佳答案
我知道我在这个问题上迟到了,但我只是偶然发现了它,它看起来很孤独......
要了解此限制,您必须了解 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
(或 _tu
,如果您不喜欢 CamelCase 命名)作为后缀,并将其用于测试套件。我希望这有帮助。
关于c++ - 类,BOOST_TEST_MODULE,BOOST_AUTO_TEST_SUITE : problems from naming?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17627154/