Я настраиваю кучу модульных тестов с использованием CppUnit, но у меня проблема в том, что ни один из тестов не запускается. Проект разделен на несколько небольших библиотек, и я планировал разделить классы модульных тестов таким же образом, а затем связать их все в одну тестовую программу. Проблема в том, что тестовые классы находятся в своих собственных библиотеках, они не будут связаны с основной тестовой программой, если я не вызову их явно, т.е. я должен вставить
runner.addTest( TestClass::suite() );
индивидуально для каждого класса тестов и не может использовать метод makeTests () TestFactoryRegistry для получения списка тестов. Если я просто скомпилирую их все вместе в верхнем каталоге, метод makeTests () будет работать нормально, но я не хочу, чтобы все тестовые классы находились в одном месте, если я могу помочь.
Документация CppUnit дает следующую небольшую подсказку
Проблема с соединением при использовании Helper
макросы?
Когда вы создаете проект и пишете
его юнит тесты, работа выполнена
легче за счет использования
так называемые вспомогательные макросы:
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION,
CPPUNIT_REGISTRY_ADD и
CPPUNIT_REGISTRY_ADD_TO_DEFAULT.
Проблема в том, что если вы используете те,
макросы в файле исходного кода
Класс TestFixture (скажем, MyTest как
пример), и если вы используете строку вроде
этот
runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest()
);
в вашей функции main () в файле
main.cpp, там не будет тестового прогона
на все!
Причина в том, что ссылка просто
этап, один из этапов сборки
процесс, не вставляйте объект
файлы (файлы .obj или .o) в финале
исполняемый, если нет неопределенного
символ в вашем main.cpp.
Таким образом, объектный код, который
содержит статический регистр авторегистрации
инстанцирование переменных не является частью
финальный исполняемый файл и не может
вставать в бегун
функция main ().
Вы должны создать неопределенный символ
в main.cpp, чтобы файл mytest.o
интегрирован с main.o в
окончательный исполняемый файл.
Трюк, совершенный Мишелем Нолардом
но не говорит, как заставить это работать, и я просто достаточно плотен, чтобы самому не разобраться и не найти пример в сети.
Теперь я мог бы просто сделать отдельный исполняемый тест для каждой библиотеки, и, в конце концов, я могу пойти по этому пути, но я хотел сначала попытаться заставить это работать, поэтому у меня была только одна программа для тестирования, чтобы проверить все вещь. Любые идеи / примеры того, как заставить это работать?