Существует ли cppunit, эквивалентный атрибуту Category nunit для тестовых случаев?

Мне нужна функция, эквивалентная атрибуту категории nUnit для тестовых случаев.

Я унаследовал большое количество тестовых случаев C++, некоторые из которых являются модульными тестами, а некоторые — более длительными интеграционными тестами, и мне нужно настроить процесс построения непрерывной интеграции, чтобы игнорировать интеграционные тестовые случаи.

Я бы предпочел просто пометить все тестовые примеры интеграции и указать cppunit исключить их во время сборки CI.

Я упускаю из виду функцию cppunit или есть альтернативный способ добиться этого?


person Dan Hermann    schedule 10.10.2011    source источник


Ответы (1)


Отсутствуют собственные атрибуты категорий тестов. CppUnit немного проще. CppUnit даже не поставляется с средством запуска тестов из командной строки для вашего приложения. Вы должны написать свою собственную простую функцию main(), которая запускает TestRunner.

Вот канонический пример.

#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TestRunner.h>

int main( int argc, char **argv)
{
  CppUnit::TextUi::TestRunner runner;
  CppUnit::TestFactoryRegistry &registry = CppUnit::TestFactoryRegistry::getRegistry();
  runner.addTest( registry.makeTest() );
  bool wasSuccessful = runner.run( "", false );
  return wasSuccessful;
}

TestSuite — это набор TestCases. TestRunner выполняет набор TestSuites. Обратите внимание, что в этом примере он получает TestSuites из TestFactoryRegistry, который вы заполняете с помощью вызова макроса CPPUNIT_TEST_SUITE_REGISTRATION(MyTestSuite). Но TestCases по-прежнему остаются вашими тестовыми классами.

Вы, безусловно, можете реализовать эти атрибуты самостоятельно, точно так же, как расширяете любой класс с помощью фасада. Создайте свой новый класс из TestSuite. Добавьте в свои тесты атрибуты, которые вы можете выбрать, а затем заполните свой TestRunner, выполняя «только модульные тесты» или «только интеграционные тесты» или что угодно.

В этом отношении TestRunner может выбирать тесты для выполнения на основе имени. Если вы назвали все свои интеграционные тесты префиксом вроде ITFoo, ITBar и т. д., вы можете выбрать все тесты, начинающиеся с «IT».

Есть десятки способов решить вашу проблему, но вам придется сделать это самостоятельно. Если вы можете написать код, достойный модульного тестирования, это не должно иметь для вас большого значения. :-)

person John Deters    schedule 12.11.2011