Тестирование DLL с помощью Boost :: Test? - PullRequest
4 голосов
/ 04 февраля 2011

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

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

С уважением,

Джейм.

Ответы [ 2 ]

4 голосов
/ 08 февраля 2011

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

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

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

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

    test_runner.exe --test "your_lib" .dll

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

2 голосов
/ 04 февраля 2011

Вы можете сначала создать свою 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 не было никакой важной логики, но обычно это плохая идея .

...