Interested Article - Google C++ Testing Framework
- 2020-02-20
- 1
Google C++ Testing Framework ( Google Test ) — библиотека для модульного тестирования ( англ. unit testing ) на языке C++. Исходные тексты открыты с середины 2008 года под лицензией BSD . Документация частично переведена на русский язык. .
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);
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 тесно связана с библиотекой , позволяющей тестировать взаимодействие вашего класса с другими. С помощью этой библиотеки вы сможете убедиться в том, что ваш класс вызывает методы других объектов , а также проверить, что эти методы вызываются с нужными значениями параметров , нужное количество раз , в нужном порядке .
Примечания
- . Дата обращения: 16 июля 2009. 5 апреля 2009 года.
- . Дата обращения: 28 апреля 2022. 28 апреля 2022 года.
- . Дата обращения: 25 апреля 2016. Архивировано из 5 апреля 2016 года.
- . Дата обращения: 25 апреля 2016. Архивировано из 5 апреля 2016 года.
- . Дата обращения: 25 апреля 2016. 8 февраля 2016 года.
- . Дата обращения: 25 апреля 2016. 8 февраля 2016 года.
- . Дата обращения: 25 апреля 2016. 8 февраля 2016 года.
- . Дата обращения: 25 апреля 2016. 8 февраля 2016 года.
Ссылки
- (англ.)
- (англ.)
- (англ.)
- (недоступная ссылка)
- (недоступная ссылка)
- 2020-02-20
- 1