Google C++ Testing Framework

Материал из Seo Wiki - Поисковая Оптимизация и Программирование

Перейти к: навигация, поиск

Google C++ Testing Framework — система модульного тестирования.

На сегодняшний день существует много средств модульного тестирования (англ. unit testing) для языка программирования С++. В середине 2008 года разработчики компании Google выложили[1] в публичный доступ свою собственную разработку в области тестирования — Google C++ Testing Framework (простоты далее по тексту будет использоваться имя Google Test). Библиотека распространяется в исходных текстах под лицензией BSD. Некоторые части документации переведены на русский язык.[2]

Google Test построена на известной методологии тестирования xUnit, то есть когда отдельные части программы (классы, функции, модули) проверяются отдельно друг от друга, в изоляции. Библиотека сама по себе разработана с активным применением тестирования, и если вы захотите что-то добавить в официальную версию, то кроме кода самих изменений вам придется написать набор тестов, подтверждающих их корректность.

Содержание

Основные особенности

  • Минимальной единицей тестирования является одиночный тест. Тесты не требуется отдельно регистрировать для запуска. Каждый объявленный в программе тест автоматически будет запущен.
  • Тесты объединяются в группы (наборы). Полное имя теста формируется из имени группы и собственного имени теста.
  • Тесты могут использовать общие данные (англ. test fixture), что позволяет логически объединять тесты и создавать универсальную среду для тестирования всего модуля или класса.
  • Библиотека является безопасной для многопотокового использования, хотя сами разработчики дают конкретные рекомендации, как правильно ее использовать в программах, работающих в нескольних потоках.

Поддерживаемые платформы

Официально Google Test поддерживает Linux, Windows и Mac. Для этих платформ библиотека предоставляет все необходимые скрипты для сборки. Однако, Google Test также работает на AIX, HP-UX, Solaris, Tru64, zSeries и множестве других систем. Для официально неподдерживаемых платформ разработчик должен самостоятельно скомпилировать Google Test. Кроме этого, авторы включили в состав библиотеки специальный скрипт, который упаковывает всю библиотеку всего в два файла: gtest-all.cc и gtest.h. Эти файлы могут быть включены в состав проекта без каких-либо дополнительных усилий по предварительной сборке библиотеки.

Пример тестирования свободной функции

Например, имеется функция, возвращающая целое:

 int Factorial(int n); // Вернуть факториал n

Тест для этой функции может быть таким:

 // Проверить факториал от 0.
 TEST(FactorialTest, HandlesZeroInput) {
   EXPECT_EQ(1, Factorial(0));
 }
 
 // Проверить факториал некоторых положительных значений.
 TEST(FactorialTest, HandlesPositiveInput) {
   EXPECT_EQ(1, Factorial(1));
   EXPECT_EQ(2, Factorial(2));
   EXPECT_EQ(6, Factorial(3));
   EXPECT_EQ(40320, Factorial(8));
 }

Пример тестирования класса

Тест для очереди типа FIFO с именем Queue, имеющей следующий интерфейс:

 template <typename E> // E - типа элемента.
 class Queue {
  public:
   Queue();
   void Enqueue(const E& element);
   E* Dequeue(); // Возвращает NULL, если очередь пуста.
   size_t size() const;
   ...
 };

Сначала определяется тестовый класс (англ. test fixture):

 class QueueTest : public ::testing::Test {
  protected:
   virtual void SetUp() {
     q1_.Enqueue(1);
     q2_.Enqueue(2);
   } 
 
   Queue<int> q0_;
   Queue<int> q1_;
   Queue<int> q2_;
 };

Теперь сам тест (макрос TEST_F() используется вместо TEST(), так как тестирующая функция должна иметь доступ к полям и методам класса):

 // Проверка инициализации очереди.
 TEST_F(QueueTest, IsEmptyInitially) {
   EXPECT_EQ(0, q0_.size());
 }
 
 // Проверка выемки элемента из очереди.
 TEST_F(QueueTest, DequeueWorks) {
   int* n = q0_.Dequeue();
   EXPECT_EQ(NULL, n);
 
   n = q1_.Dequeue();
   ASSERT_TRUE(n != NULL);
   EXPECT_EQ(1, *n);
   EXPECT_EQ(0, q1_.size());
   delete n;
 
   n = q2_.Dequeue();
   ASSERT_TRUE(n != NULL);
   EXPECT_EQ(2, *n);
   EXPECT_EQ(1, q2_.size());
   delete n;
 }

В Google Test есть два основых типа проверок (утверждений) —- ASSERT_* и EXPECT_*. Если используется EXPECT_*, то в случае сбоя тест продолжит работу, хотя сбой будет зарегистрирован, и тест в любом случае считается неуспешным. Если же продолжение теста бессмысленно, используется ASSERT_*. Данная проверка прерывает работу теста в случае несрабатывания проверки.

Дополнительные возможности

Библиотека Google Test тесно связана с Google Mock. Библиотека Google Mock позволяет не просто делать тестовые проверки, а задавать ожидаемое поведение программы в виде специальных команд, что значительно упрощает и ускоряет написание тестов.

Примечания

Ccылки

Личные инструменты

Served in 0.219 secs.