Ошибка при использовании макроса CPPUNIT_TEST_SUITE

После прочтения кулинарной книги CppUnit и большого количества поиска в Google, я не смог выяснить причину конкретной ошибки, которую я получаю.

У меня есть очень простой класс CppUnit testFixture ->
У меня есть файл — MyTest.h только с определением класса TestFixture.

// MyTest.h
#include <cppunit/ui/text/TestRunner.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/extensions/HelperMacros.h>

class MyTest : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(MyTest);    // Line num 8
CPPUNIT_TEST(TestFailure);
CPPUNIT_TEST_SUITE_END();

public:
void TestFailure()
{
CPPUNIT_ASSERT(false);
}
};

Кроме того, MyTest.cpp для вождения этого класса MyTest.

 // MyTest.cpp
#include "MyTest.h"

Затем файл с именем main.cpp, который будет создавать экземпляр runner и запускать реальный тестовый сценарий.

 // main.cpp

#include <cppunit/ui/text/TestRunner.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/extensions/HelperMacros.h>

// In my main, I define a macro ADD_TEST and do #include of file called "testList.h"// So my testList.h can have any number of ADD_TEST macros.
int main(int argc, char **argv)
{
CppUnit::TextUi::TestRunner runner;

#define ADD_TEST(_testName) \
runner.addTest(_testName::suite());
#include testList.h"#undef ADD_TEST

runner.run();
return true;
}

Вот мой testList.h ->

#pragma once
#include MyTest.h

ADD_TEST(MyTest)

Теперь эта файловая структура работает — как в настройке Windows.
В Linux я получаю следующие странные ошибки —

MyTest.h: In function 'int main(int, char**)': MyTest.h:8: error: 'main(int, char**)::MyTest' uses local type 'main(int, char**)::MyTest'
MyTest.h:8: error: trying to instantiate 'template<class Fixture> class CppUnit::TestSuiteBuilderContext'
MyTest.h: In static member function 'static void main(int, char**)::MyTest::addTestsToSuite(CppUnit::TestSuiteBuilderContextBase&)':
MyTest.h:8: error: cannot convert 'CppUnit::TestSuiteBuilderContextBase' to 'int' in initialization

Это меня совершенно запутало. Я знаю, что макросы выбираются, потому что, если я закомментирую строку num8 в MyTest.h, то появится необъявленная ошибка «suite».
Но тогда доступны макросы CPPUNIT_TEST_SUITE и т. Д., Тогда почему ошибка?
Я компилирую с -lstc ++, -ldl & -lcppunit flags.

Любая помощь приветствуется!

Спасибо!

0

Решение

Я еще не определил вашу конкретную проблему, но определил кое-что, что вы могли бы рассмотреть. Ваш ADD_TEST кажется очень ручным способом справиться с тем, для чего предназначен тестовый реестр CppUnit. Причина вызова CPPUNIT_TEST_SUITE (MyTest); макрос предназначен для регистрации ваших тестов в фреймворке, чтобы вы могли получить их во время выполнения.

Рассмотрим вместо этого основной, который выглядит следующим образом:

int main(int argc, char **argv)
{
CppUnit::TextUi::TestRunner runner;
CppUnit::Test *test = CppUnit::TestFactoryRegistry::getRegistry().makeTest();

runner.addTest( test );
runner.run();
return true;
}

Если вы хотите получить фантазию и предложить различные варианты запуска теста, вы можете выбрать их, передав определенное имя теста в качестве параметра getRegistry, как в getRegistry("MyTest").makeTest(); Очевидно, что это может быть так же легко из командной строки или файла конфигурации, однако вы хотите реализовать и контролировать его.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]