Библиотеки поблочного тестирования C++ [закрываются]

Я столкнулся с cppunit, но это не выглядело суперпростым в использовании (возможно, я не выглядел твердым, возможно, потому что C++ не работает как Java/C#). Там широко используются, простые альтернативы?

На самом деле действительно ли cppunit является стандартной платформой поблочного тестирования для C++?

17
задан jalf 10 January 2010 в 21:36
поделиться

5 ответов

Для C++ нет библиотеки модульного тестирования стандарта . Вариантов выбора много, кппюнит - один из них.

В моей компании мы используем Google Test вместе со своим партнёром Google Mock для юнит-тестирования и насмешки над объектами. Я нахожу, что они оба сочетают в себе простоту использования и гораздо более мощные, чем кппунит.

21
ответ дан 30 November 2019 в 10:29
поделиться

Вот список библиотек по тестированию единиц.

http://en.wikipedia.org/wiki/list_of_unit_testing_frameworks#c.2b.2b

Однако, насколько я знаю, CPPUNIT является самым популярным.

0
ответ дан 30 November 2019 в 10:29
поделиться

CPPUNIT, вероятно, является первой структурой тестирования подразделения для C ++. Это прямой порт JUNIT, знаменитых Java Framework. Это делает переход от Junit проще, но по стоимости несколько тяжелых рамок, которые не используют преимущества возможностей C ++, таких как Raii. Это причина, по которой были созданы легкие версии, такие как CPPunitlite, NanocppUnit. CPPUNIT2 должен был улучшить это, среди других улучшений.

TUT был очень легким, только один заголовок, но последние версии представили библиотеку.

Что касается «стандартной» фреймворки, их нет, и C ++ 1x не определяет один.

2
ответ дан 30 November 2019 в 10:29
поделиться

Я создал тестируемый пакет под названием Saru ( http://github.com/mikeando/saru ) для моего собственного dev code. Его лицензированный код BSD. Я разработал его, так как мне не понравилось несколько особенностей других испытаний. Это не широко используется, но я использовал его на нескольких коммерческих проектах, распространенных по двум компаниям.

  1. Мне не нравятся все мои тесты, которые скомпилированы в один двоичный. Мои причины для этого являются, если компиляция не удается, все тесты не удаются, если один тест неопределенный поведение, вывод программы не определен.
  2. Я хочу контролировать, какие тесты бегут. Я хочу иметь возможность группировать тесты и запускать подмножества.
  3. Я хочу, чтобы сбой компиляции теста, который будет сообщен в качестве провала теста, а не остановка всех моих тестов.
  4. Я хочу иметь возможность запустить тесты с нескольких разных языков
  5. Я хочу систему достаточно гибкой, чтобы я мог запускать определенные тесты под Валгритом (еще не в SARU :()

Так что SARU обращается к большинству этих функций Отказ Его внимание на том, чтобы быть в состоянии запустить набор тестов, написанных на разных языках. С минимальными тестовыми размерами. Вот самые маленькие (неудачные) тестирование C ++

//SARU : dummy dummy
int main() { return (1==2)?0:1; }

All Saru действительно заботится о том, это возвращаемое значение двоично, которое он компилирует. Затем он анализирует вывод, чтобы определить, какие тесты не удалось и так далее. У него есть заголовки, чтобы сделать работу с C ++ немного приятнее, чем вышеприведенный тривиальный пример:

//SARU : dummy dummy
#include "MyStruct.h"
#include "saru_cxx.h"

class Fixture
{
  MyStruct s_;
  Fixture() : s_() {}
  void test_A_is_B()
  {
     SARU_ASSERT_EQUAL( s_.A(), s_.B() );
  }

  void test_C_is_7()
  {
     SARU_ASSERT_EQUAL( 7, s_.C() );
  }
};

int main()
{
   saru::TestLogger logger;
   SARU_TEST( Fixture:: test_A_is_B, logger );
   SARU_TEST( Fixture:: test_C_is_7, logger );
   logger.printSummary();
   return logger.allOK()?0:1;
}

или если вам не нравится, как его работают заголовки C ++, он должен иметь возможность интегрироваться с другими нерешественными библиотеками с минимальными слоями.

Но он также будет запустить тесты, написанные в PHP & Python. Таким образом, вы можете настроить полнофункциональные тесты с SARU. Или вы можете запустить что-то вроде lint над вашим кодом как часть тестового набора.

2
ответ дан 30 November 2019 в 10:29
поделиться

Тест Google Framework - это альтернатива.

Вот простой пример из документации :

// Tests factorial of 0.
TEST(FactorialTest, HandlesZeroInput) {
  EXPECT_EQ(1, Factorial(0));
}

// Tests factorial of positive numbers.
TEST(FactorialTest, HandlesPositiveInput) {
  EXPECT_EQ(1, Factorial(1));
  EXPECT_EQ(2, Factorial(2));
  EXPECT_EQ(6, Factorial(3));
  EXPECT_EQ(40320, Factorial(8));
}

Он также хорошо играет с GMOCK , MOCK Framework Google для C ++.

6
ответ дан 30 November 2019 в 10:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: