Подтвердить что ты не робот

Среда тестирования C/С++ (например, JUnit для java)

Раньше ударился головой о стену, потому что я не делаю никаких тестовых классов при использовании c/С++ (но вместо этого у меня есть много методов печати).

Каков наиболее используемый метод для тестирования в коде c/С++? Java JUnit оставил меня с хорошими воспоминаниями при отладке вещей.

Я знаю, что использование утверждений в коде с определенным заголовком отладки должно работать, но не существует ли каких-либо лучших способов?

И поскольку у меня есть намерение сделать тестовые классы в будущем, любые полезные советы приветствуются.

4b9b3361

Ответ 2

Мы используем Google Test и его компаньон Google Mock, Прекрасно работает и поддерживает XML-вывод JUnit для простой интеграции с CruiseControl и т.д. Он также полностью перекрещивается с платформой, и из моих исследований несколько месяцев назад GMock был ТОЛЬКО полностью кросс-платформенным объектом, издевательским фреймворком для С++.

Ответ 4

UnitTest ++ стоит посмотреть. В нем отсутствуют функции по сравнению с некоторыми из других фреймворков, упомянутых здесь, но простота хороша - особенно если вы только начинаете.

Я считаю, что он был разработан Ноэлем Ллописом после написания статьи, упомянутой в http://gamesfromwithin.com/?p=29. Довольно легко переносить на множество разных компиляторов/платформ - полезно, если вам нужно ориентироваться на что-то другое, кроме ПК, будь то игровая консоль, встроенное устройство или как-то иначе.

Список рассылки уже некоторое время не работает, но часто возникают вопросы, исправления и/или новый выпуск, и людям, которые задают вопросы, обычно отвечают быстро.

Ответ 5

В Википедии есть длинный список фреймворков для С++ и еще один список для C.

Ответ 6

Я работаю с Qt под Windows и Linux, который предоставляет собственный интегрированный (но по сравнению с другими отдельными решениями немного ограниченный).

Это очень легко использовать и быстро учиться - см. QTestLib

чао, Крис

Ответ 7

Другая проблема, которую люди сильно переусердствовали.

Ниже приведена верхняя, грубая, нерабочая реализация номинальной инфраструктуры unit test. Имеет смысл построить Test с std::string и использовать последовательную схему именования, чтобы распечатать, какой тест терпит неудачу. Я просто использую шаблон unit test и имею некоторые скрипты, которые находят все исполняемые файлы, начиная с u (по одному на класс), запускает их по очереди и собирает возвращаемые значения.

struct Test
{
   std::vector<(std::string)fptr*(void)> tests;
   int run() const
   {
      int stat(0);
      for (/* tests */)
      {
         std::string const res(test.run());
         if (!res.empty())
         {
             std::cerr << res;
             ++stat;
         }
      }
      return stat;
   }
};

std::string test1()
{
   std::ostringstream oss;
// do a bunch of stuff
// mark some of this code to be pulled into the class documentation 

   // conditional checks follow
   if (fail)
   {
      oss << "fail: some reason" << std::endl;
   }
// more checks
   return oss.str();
}

int main(void)
{
   Tests tests;
   tests.push_back(test1);
   tests.push_back(test2);
   return tests.run();
}

Ответ 8

Бесстыдный плагин: если вы нацеливаете Windows и используете Visual Studio, посмотрите cfix и cfix studio.

Он также совместим с WinUnit.

Ответ 10

Почему бы не использовать CppUnit? Он был создан как порт JUnit.

Ответ 11

Если вы используете окна, посмотрите: Ограничения использования С++/CLI с NUnit и напишите ваши тесты в http://en.wikipedia.org/wiki/Managed_Extensions_for_C%2B%2B.

также: http://golios.blogspot.com/2008/12/using-nunit-with-c-part-2.html, http://golios.blogspot.com/2008/11/using-nunit-with-native-c.html

это будет работать так же, как junit, за исключением того факта, что nunit не создает новый экземпляр класса тестового примера перед запуском каждого теста.

Ответ 14

Попробуйте использовать Catch. http://catch-lib.net

Он прост в использовании и настройке и достаточно силен для большинства.