Проблема в использовании Boost Unit Test - PullRequest
0 голосов
/ 05 сентября 2011

Я хочу начать использовать библиотеку Boost Test для создания тестов для моего приложения.

Следуя инструкциям, которые я нашел в http://www.boost.org/doc/libs/1_47_0/libs/test/doc/html/tutorials/new-year-resolution.html Я начал свой тестовый класс.

Итак, я создал класс для своего теста, и вот простой .cpp

#define BOOST_TEST_MODULE MyClass test
#include <boost/test/unit_test.hpp>

#include "myclasstest.h"

MyClassTest::MyClassTest()
{

}

/**
 * Test the class.
 */
bool MyClassTest::testClass()
{
    BOOST_AUTO_TEST_CASE(empty_test)
    {
        MyClass xTest;
        BOOST_CHECK(xTest.isEmpty());
    }

return true;
}

Хорошо, я знаю, что должен сделать что-то более умное, чем вернуть true, но этоне проблема.Проблема в том, что он не компилируется.Я думаю, что библиотека исправлена ​​и загружена, потому что если я скомпилирую только с первыми двумя строками, у меня нет ошибки, как объяснено на странице учебника.

Если я пытаюсь скомпилировать ее, я получаю вывод этой ошибки из GCC:

myclasstest.cpp: In member function ‘bool MyClassTest::testClass()’:
myclasstest.cpp:16:5: error: a function-definition is not allowed here before ‘{’ token
myclasstest.cpp:16:1: error: ‘empty_test_invoker’ was not declared in this scope
myclasstest.cpp:16:5: error: template argument for ‘template<class T> struct  boost::unit_test::ut_detail::auto_tc_exp_fail’ uses local type ‘MyClassTest::testClass()::empty_test_id’
myclasstest.cpp:16:5: error:   trying to instantiate ‘template<class T> struct boost::unit_test::ut_detail::auto_tc_exp_fail’
myclasstest.cpp:17:5: error: a function-definition is not allowed here before ‘{’ token
myclasstest.cpp:23:1: error: expected ‘}’ at end of input
myclasstest.cpp:23:1: warning: no return statement in function returning non-void

Я новичок в Boost, поэтому я не знаю, что мне делать.Что я делаю не так?Я думаю, что я сделал те же шаги учебника, или нет?

Спасибо за ваши ответы.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2012

Вы должны использовать BOOST_AUTO_TEST_CASE с функциями, не являющимися членами.Например:

#define BOOST_TEST_MODULE MyClass test
#include <boost/test/unit_test.hpp>

#include "MyClass.h"

BOOST_AUTO_TEST_CASE( testMyClass )
{
   MyClass xTest;
   BOOST_CHECK(xTest.isEmpty());
}

Проверьте приборы , если вам нужен контекст теста.

0 голосов
/ 29 ноября 2011

BOOST_AUTO_TEST_CASE должен быть размещен в области видимости файла.Не может быть места внутри реализации функции.Вы можете использовать тестовые примеры на основе метода класса, но не с автоматической регистрацией (пока).Проверьте документацию для более подробной информации

...