- Google C++ Testing Framework
-
Google C++ Testing Framework (Google Test) — библиотека для модульного тестирования (англ. unit testing) на языке С++. Исходные тексты открыты с середины 2008 года[1] под лицензией BSD. Документация частично переведна на русский язык.[2]
Google Test построена на методологии тестирования xUnit, то есть когда отдельные части программы (классы, функции, модули) проверяются отдельно друг от друга, в изоляции. Библиотека сама по себе разработана с активным применением тестирования, и если вы захотите что-то добавить в официальную версию, то кроме кода самих изменений вам придется написать набор тестов, подтверждающих их корректность.
Содержание
Основные особенности
- Минимальной единицей тестирования является одиночный тест. Тесты не требуется отдельно регистрировать для запуска. Каждый объявленный в программе тест автоматически будет запущен.
- Тесты объединяются в группы (наборы). Полное имя теста формируется из имени группы и собственного имени теста.
- Тесты могут использовать общие данные (англ. test fixture), что позволяет логически объединять тесты и создавать универсальную среду для тестирования всего модуля или класса.
- Библиотека является безопасной для многопотокового использования, хотя сами разработчики дают конкретные рекомендации, как правильно ее использовать в программах, работающих в нескольких потоках.
- В состав библиотеки входит специальный скрипт, который упаковывает её всего в два файла: gtest-all.cc и gtest.h. Эти файлы могут быть включены в состав проекта без каких-либо дополнительных усилий по предварительной сборке библиотеки.
Поддерживаемые платформы
Официально Google Test поддерживает Linux, Windows и Mac. Для этих платформ библиотека предоставляет все необходимые скрипты для сборки. Однако, Google Test также работает на AIX, HP-UX, Solaris, Tru64, zSeries и множестве других систем. Для официально неподдерживаемых платформ разработчик должен самостоятельно скомпилировать Google Test.
Пример тестирования свободной функции
Например, имеется функция, возвращающая целое:
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 позволяет не просто делать тестовые проверки, а задавать ожидаемое поведение программы в виде специальных команд, что значительно упрощает и ускоряет написание тестов.
Примечания
Ссылки
Категория:- Тестирование программного обеспечения
Wikimedia Foundation. 2010.