2011-02-04 4 views
4

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

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

С уважением,

jäme.

ответ

4

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

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

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

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

    test_runner.exe --test «your_lib» .dll

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

+2

Где я могу найти консольный испытательный стенд BoostTest? – StNickolay

2

Вы можете создать свой 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 
    ; 

Вы делаете должны быть осторожны, чтобы не иметь gic в вашем DllMain, но это обычно a bad idea.