Google C++ Testing Framework (Google Test) — библиотека для модульного тестирования () на языке C++. Исходные тексты открыты с середины 2008 года под лицензией BSD. Документация частично переведена на русский язык..
Google Test построена на методологии тестирования xUnit, то есть когда отдельные части программы (классы, функции, модули) проверяются отдельно друг от друга, в изоляции. Библиотека сама по себе разработана с активным применением тестирования, когда при добавлении каких-либо частей в официальную версию, кроме кода самих изменений необходимо написать набор тестов, подтверждающих их корректность.
Основные особенности Минимальной единицей тестирования является одиночный тест. Тесты не требуется отдельно регистрировать для запуска. Каждый объявленный в программе тест автоматически будет запущен. Тесты объединяются в группы (наборы). Полное имя теста формируется из имени группы и собственного имени теста. Тесты могут использовать тестовые классы (), что позволяет создавать и повторно использовать одну и ту же конфигурацию объектов для нескольких различных тестов. Разработчики утверждают, что библиотека является безопасной для многопоточного использования, замечая при этом, что для использования утверждений в разных потоках одновременно необходимо самостоятельно разработать примитивы синхронизации. В состав библиотеки входит специальный скрипт, который упаковывает её исходные тексты всего в два файла: 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; ...
Сначала определяется тестовый класс ():
class QueueTest : public ::testing::Test { protected: virtual void SetUp() { q1_.Enqueue(1); q2_.Enqueue(2); q2_.Enqueue(3);
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 C++ Testing Framework на Github Документация по Google C++ Testing Framework Документация по Google C++ Mocking Framework Введение в Google C++ Testing Framework Google C++ Mocking Framework для начинающих
Категория:Библиотеки модульного тестирования Категория:Библиотеки C++ Категория:Google