C++ 类、BOOST_测试模块、BOOST_自动测试套件:命名问题?

C++ 类、BOOST_测试模块、BOOST_自动测试套件:命名问题?,c++,boost,boost-unit-test-framework,C++,Boost,Boost Unit Test Framework,因此,我开始使用boost单元测试。 当我尝试构建一个简单的测试来创建一个类的实例时,我得到了一个编译错误。如果没有该类的实例,它就可以正常工作 编译错误消息为: /src/test/WTFomgFail_test.cpp: In member function ‘void WTFomgFail::defaultConstructor::test_method()’: /src/test/WTFomgFail_test.cpp:20: error: expected primary-expres

因此,我开始使用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: WTFomgFail.cpp: 如果我将
BOOST\u AUTO\u TEST\u SUITE(WTFomgFail)
更改为其他内容,例如
BOOST\u AUTO\u TEST\u SUITE(omgrely)
,错误就会消失

此外,在使用
BOOST\u AUTO\u TEST\u套件(omgrely)
时,我没有发现错误


所以,我的问题是,当使用boost UTF时,模块、测试套件和类的命名是明确禁止的吗?

我知道我来晚了,但我只是偶然发现了它,它看起来很孤独

要理解这个限制,您必须了解Boost测试最初是如何工作的。(它仍然可以这样工作,但当时没有
BOOST\u AUTO\u…
宏,您必须这样做。)

从:

类测试\u类{
公众:
无效测试方法1()
{
BOOST_检查(true/*测试断言*/);
}
无效测试方法2()
{
BOOST_检查(false/*测试断言*/);
}
};
//____________________________________________________________________________//
测试套件*
初始单元测试套件(int argc,char*argv[])
{
boost::共享测试仪(新测试类);
框架::主测试套件()。
添加(BOOST_TEST_用例(BOOST::bind(&TEST_类::TEST_method1,tester));
框架::主测试套件()。
添加(BOOST_测试_用例(BOOST::bind(&TEST_类::TEST_method2,tester));
返回0;
}
这有点麻烦,因为每次添加测试函数时,都必须在两个不同的位置(函数的定义和向测试套件注册)更改代码。注册也有点不直观

这就是为什么他们推出了
BOOST\u AUTO\u TEST\u套件
BOOST\u AUTO\u TEST\u案例
,它们为您提供了这些功能

传递给
BOOST\u AUTO\u TEST\u SUITE
的参数当然是类的名称(
TEST\u class
)。
BOOST\u AUTO\u TEST\u CASE
的参数是测试函数的名称(
TEST\u method1()
TEST\u method2()

因此,这些可能(当然)与您正在测试的类和函数不同。您可以为此使用名称空间,但就我个人而言,我更喜欢在类名后面加上
Tu
(或者
\u Tu
,如果您不喜欢CamelCase命名),并将其用于测试套件

我希望这有帮助

#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()
{
}
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;
}