Как проверить, работает ли Google Test в моем коде - PullRequest
5 голосов
/ 21 мая 2011

У меня есть раздел кода, который я не хотел бы запускать, если он тестируется модулем. Я надеялся найти какой-нибудь флаг #defined, установленный библиотекой gtest, который я могу проверить. Я не смог найти тот, который используется для этой цели, но, просмотрев заголовок gtest, я нашел тот, который, как мне показалось, мог бы использовать так:

SomeClass::SomeFunctionImUnitTesting() {
    // some code here
    #ifndef GTEST_NAME
    // some code I don't want to be tested here
    #endif
    // more code here
}

Похоже, это не работает, поскольку весь код выполняется независимо. Есть ли другой флаг, который я могу проверить, чтобы он работал?

1 Ответ

5 голосов
/ 21 мая 2011

Google Test не требует и не предоставляет свою собственную оболочку сборки.Вам даже не нужно иногда перекомпилировать исходные файлы.Вы можете просто связать их вместе со своим тестовым кодом.Ваш тестовый код вызывает ваш уже скомпилированный код библиотеки.Код вашей библиотеки, вероятно, даже не включает в себя и заголовки Gtest.

Если вы хотите, чтобы код вашей библиотеки работал в тестируемом режиме по-другому, то сначала нужно убедиться, что код вашей библиотеки скомпилирован по-другому тестируется.Вам понадобится другая цель сборки.При компиляции для этой цели сборки вы можете определить символ, который указывает вашему коду, что он находится в тестовом режиме.Я бы избегал префикса GTEST для этого символа;оставьте для использования собственным кодом Google.


Еще один способ добиться того, что вы ищете, - использовать внедрение зависимостей .Переместите ваш специальный код в другую подпрограмму, возможно, в свой собственный класс.Передайте указатель на эту функцию или класс в вашу функцию SomeFunctionImUnitTesting и вызовите ее.Когда вы тестируете этот код, вы можете сделать так, чтобы ваша тестовая программа передавала ему другую функцию или класс, поэтому избегая проблемного кода без необходимости многократной компиляции кода.

...