есть ли у вас и как вы делаете C ++ автотест? - PullRequest
0 голосов
/ 26 мая 2010

Что касается автотеста, как вы проводите автотест для программ на C ++? Существуют ли какие-либо фреймворки автотестов, которые можно использовать для модульного и интеграционного тестирования?

Ответы [ 5 ]

4 голосов
/ 25 сентября 2010

Вы говорите Автотест ала Руби Автотест ? Если так, возможно, Watchr будет работать для вас. Да, вам нужно будет установить среду выполнения Ruby на компьютере разработчика, но похоже, что он может запускать практически все, что можно сделать из командной строки при изменении файловой системы. Например, если вы хотите, чтобы Watchr собирал и запускал ваши тесты C ++ в любое время, когда файл .c / .cpp / .h / .hpp в вашем исходном дереве изменился, вы можете сделать что-то вроде этого:

watch('src/(.*)\.[h|cpp|hpp|c]') {system "build/buildAndRunTests.bat"}

Эта конкретная команда, очевидно, делает некоторые предположения о том, как настроен ваш процесс сборки (и, очевидно, что вы работаете в Windows), но это должно быть суть. Наша команда настраивает наши проекты модульных тестов с событием после сборки, которое автоматически запускает двоичный файл встроенного модульного теста, поэтому мы можем просто запустить эту часть нашего процесса сборки в скрипте buildAndRunTests.bat и распечатать результаты в командной строке , Это может занять некоторое время, но похоже, что Watchr может быть хорошим выбором. Я обновлю этот ответ, когда попробую (надеюсь, в начале следующей недели).

ОБНОВЛЕНИЕ : Я только что попробовал это с одним из моих проектов C # и заставил это работать там. Поэтому я теоретически должен работать и с проектами на C ++.

autotest.watchr

watch('./.*/.*\.cs$') {system "cd build && buildAndRunTests.bat && cd ..\\"}

Обратите внимание на $ в конце регулярного выражения. Это важно, потому что во время сборки в дереве исходных текстов генерируется много артефактов, и если какой-либо из них соответствует строке .cs , он запускает еще один запуск, фактически вызывая бесконечный цикл. Вероятно, то же самое произойдет, если вы создадите / измените какие-либо исходные файлы во время сборки, поэтому вам, возможно, придется найти способ компенсации.

buildAndRunTests.bat

pushd ..\
rem Build test project
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.com" Tests.Unit\Tests.Unit.csproj /rebuild Release
popd

rem Navigate to the directory containing the built files
pushd ..\Tests.Unit\bin\Release
rem Run the tests through nunit-console
..\..\..\Dependencies\NUnit-2.5.5-bin\net-2.0\nunit-console.exe Tests.Unit.dll /run=Tests.Unit
popd

Затем в отдельном окне консоли просто перейдите в каталог проекта и выполните следующую команду (предполагается, что autotest.watchr находится в верхней части дерева проекта, см. Ниже):

watchr autotest.watchr

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

Это структура каталогов для справки:

/Project
  /build
    buildAndRunTests.bat
  /Tests.Unit
  /Dependencies
    /NUnit-2.5.5-bin
      /net-2.0
        nunit-console.exe
  autotest.watchr

Надеюсь, это поможет.

0 голосов
/ 26 мая 2010

В прошлый раз, когда я работал в Qt, я использовал QTestLib Qt для модульных тестов. Это хорошо сработало для моих нужд. http://doc.qt.nokia.com/4.6/qtestlib-manual.html

0 голосов
/ 26 мая 2010

Boost имеет библиотеку тестов , на которую вы можете посмотреть среди других.

0 голосов
/ 26 мая 2010

Вы можете использовать NUnit для достижения этой цели, но могут быть и лучшие способы.С NUnit вы пишете тестовые классы в управляемом C ++ / CLI, который вызывает ваш код C ++, который предположительно работает как неуправляемый.Таким образом, для этой опции часть вашего кода C ++ теперь работает как управляемая только ради использования NUnit.Можно спорить о «чистоте» этого подхода.Другая проблема заключается в подключении отладчика к NUnit (конечно, с включенным как управляемым, так и встроенным) и попыткой разумно перебрать биты управляемого C ++ / CLI.Несмотря на это, наш офис уже некоторое время использует модуль NUnit для C ++ и тестирование интеграции.

Только что увидел ответ @Patrick о CPPUnit, мне придется это посмотреть.

0 голосов
/ 26 мая 2010

Семейство xUnit можно использовать для модульных тестов. Он существует для простого кода C ++ (CPPUNIT) и для кода .Net (NUnit).

...