Вопросы о выводе google test и assertion (результаты тестирования); могу ли я доверять, когда gtest говорит, что тест пройден?

Когда я создаю тест TEST или TEST_F, как я могу узнать, что мое утверждение действительно выполняется?

У меня проблема в том, что когда у меня есть пустой TEST_F, например,

TEST_F(myFixture, test1) {}

Когда он запускается, gtest говорит, что этот тест пройден. Я ожидал, что тест провалится, пока не напишу тестовый код. Тем не мение.

Итак, моя проблема в том, что когда gtest говорит, что когда тест «ОК» или что он пройден, я не могу ему доверять, потому что тест может «пройти», если нет тестового кода.

Было бы неплохо распечатать, что делают мои вызовы EXPECT_ или ASSERT, а затем посмотреть, проходят ли они. Проблема в том, что если я делаю какие-либо вызовы std::cout, они не синхронизируются с результатами теста в конце. Выходные сообщения не синхронизированы ни с одним из моих собственных std::cout вызовов.

Есть ли подробный вариант для тестирования Google? Как я могу быть уверен, что EXPECT, который я закодировал, действительно работает?


person mycodeplanet    schedule 13.08.2016    source источник
comment
Я думаю, вы думаете об утверждениях задом наперед. Это не утверждения, необходимые для прохождения теста, это утверждения, которые могут привести к провалу теста. Таким образом, я думаю, вы в основном спрашиваете, как я могу гарантировать, что каждый тестовый пример выполняет хотя бы одно утверждение?   -  person Oliver Charlesworth    schedule 13.08.2016
comment
Кроме того, вы можете убедиться, что ваши тесты полезны, написав их до того, как код заработает, и наблюдая за их ошибками, чтобы убедиться, что они не работают по правильной причине.   -  person jonrsharpe    schedule 13.08.2016
comment
Да. Как я могу обеспечить выполнение утверждения?   -  person mycodeplanet    schedule 13.08.2016
comment
Сделайте утверждение, которое всегда терпит неудачу (что-то вроде ASSERT(false);), и проверьте, говорит ли оно, что ваш тест не пройден.   -  person nwp    schedule 13.08.2016
comment
@mycodeplanet, как указано выше, вы пишете неудачный тест, затем делаете его успешным. Разработка через тестирование Google.   -  person jonrsharpe    schedule 13.08.2016


Ответы (1)


Вы можете рассмотреть TDD, Test Driven Development, https://en.wikipedia.org/wiki/Test-driven_development

  • напишите один тест => он не пройдёт
  • написать код, чтобы пройти тест => тест проходит

Промойте и повторите: выражайте каждое требование как тест, который изначально не проходит. Напишите код, чтобы этот тест прошел.

person Hugh Perkins    schedule 23.11.2016