Тестирование DLL с помощью Boost::Test?

Я разрабатываю DLL на C++ и хочу выполнить модульное тестирование этой DLL с помощью библиотек Boost Test. Я внимательно прочитал руководство по тестированию Boost, но, поскольку я новичок, у меня есть следующий вопрос:

Должен ли я добавлять тестовые классы в тот же проект VC, в котором я разрабатываю свою DLL? В идеале я хочу сделать это, но меня смущает то, что DLL не имеет main(), а, с другой стороны, для выполнения теста Boost требуется собственный main(). Итак, куда в этом сценарии идут выходные данные теста Boost? (На самом деле, я практически реализовал это и не вижу никакого результата :( и почти два дня потратил на выяснение проблемы, но безуспешно)

С уважением,

Джеймс.


person Jame    schedule 04.02.2011    source источник


Ответы (2)


У вас есть 3 способа сделать это:

  1. Вы определенно можете сделать то, что предлагает другой ответ, и построить свою библиотеку как статическую. Я бы не рекомендовал этот путь, хотя.

  2. В вашем решении может быть один или несколько отдельных проектов модульного тестирования. Эти проекты будут связаны с вашей библиотекой, а также со статической или общей версией библиотеки Boost Test. Каждый проект будет иметь файл main, либо предоставленный библиотекой Boost.Test, либо реализованный вами вручную.

  3. Наконец, у вас есть еще один вариант, и вы можете поместить свои тестовые примеры прямо в свою библиотеку. Вам нужно будет связать с общей версией Boost Test. Как только ваша библиотека будет построена, вы сможете использовать ее регулярно, как и сейчас, плюс у вас будет возможность выполнять встроенные в нее тестовые случаи. Для выполнения тестового примера вам понадобится средство запуска тестов. Boost Test предоставляет один из них, который называется «консольный тест-раннер». Вам нужно будет создать его один раз, и вы сможете использовать его для всех своих проектов. Используя этот тестовый бегун, вы можете выполнить свой модульный тест следующим образом:

    test_runner.exe --проверить "your_lib".dll

    Вы должны понимать все плюсы и минусы этого подхода. Код вашего модульного теста будет частью вашей производственной библиотеки. Это сделает его немного больше, но, с другой стороны, вы сможете запустить тест в рабочей среде, если это необходимо.

person Gennadiy Rozental    schedule 07.02.2011
comment
Где я могу найти расходные материалы BoostTest для запуска консольных тестов? - person StNickolay; 10.09.2013

Сначала вы можете создать свою DLL как файл статической библиотеки. Затем вы можете использовать его для прямой компиляции окончательной DLL и создания исполняемого файла, содержащего ваши тесты ускорения. Вот пример использования boost.build:

lib lib_base
    : # sources
        $(MAIN_SOURCES).cpp  # Sources for the library.
    : # requirements
        <link>static
    : : ;

lib dll_final
    : # sources
        lib_base
        $(DLL_SOURCES).cpp   # Sources for DllMain .
    : # requirements
        <link>shared
    : : ;

unit-test test_exe
    : # sources
        lib_base
        $(TEST_SOURCES).cpp  # Sources for the unit tests.
    : # properties
        <library>/site-config//boost/test
    ;

Вы должны быть осторожны, чтобы не иметь никакой важной логики в вашем DllMain, но обычно это плохая идея.

person Ze Blob    schedule 04.02.2011