所以,我开始使用 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 OMGreallyBOOST_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_SUITEBOOST_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/

10-12 16:28