Проблема в использовании Boost Unit Test
Я хочу начать использовать библиотеку 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;
}
Хорошо, я знаю, что должен сделать что-то более умное, чем вернуть истину, но это не проблема. Проблема в том, что он не компилируется. Я думаю, что библиотека исправлена загружена, потому что, если я компилирую только с первыми двумя строками, у меня нет ошибок, как объяснено на странице учебника.
Если я пытаюсь скомпилировать его, я получаю вывод об ошибке из 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 ответа
BOOST_AUTO_TEST_CASE должен быть размещен в области видимости файла. Не может быть места внутри реализации функции. Вы можете использовать тестовые примеры на основе метода класса, но не с автоматической регистрацией (пока). Проверьте документацию для более подробной информации
Вы должны использовать 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());
}
Проверьте приборы, если вам нужен тестовый контекст.