googletest дружественная альтернатива C ++ assert ()? - PullRequest
1 голос
/ 07 декабря 2011

Я пишу новый класс, в который я вставил C ++ assert(), чтобы проверить правильность состояния.

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

Должен ли я вместо этого генерировать исключения или есть какой-то другой способ проверки состояния googletest для проверки состояния объекта?

Редактировать: я также открыт для альтернатив gmock (изучая это сейчас).

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

Утверждения ведут себя по-разному на разных платформах. Если они распечатают сообщение и прекратят выполнение программы на вашем компьютере, вы можете использовать Google Test death tests для их проверки. Поместите оператор, который должен завершить программу, в макрос EXPECT_DEATH:

EXPECT_DEATH(MyFunction(with_argument_that_causes_it_to_abort), "");

Это запустит оператор в подпроцессе и проверит, что оператор завершает его. Вы можете указать регулярное выражение во втором параметре, чтобы оно соответствовало выходным данным подпроцесса. Этот макрос был создан специально для проверки вызовов типа assert.

Код, созданный в Visual Studio, может отображать диалоговое окно и ждать реакции пользователя вместо печати сообщения, что делает тесты на смерть неудобными. Но вы должны иметь возможность настроить поведение утверждения, чтобы не делать этого.

0 голосов
/ 07 декабря 2011

Если вы используете googletest, разве вы не должны использовать ASSERT_TRUE () вместо assert ()?Тем не менее, из моего чтения http://code.google.com/p/googletest/wiki/Primer вы должны иметь возможность использовать assert (), ASSERT_TRUE () или throw, чтобы вызвать сбой теста.

В исключениях против assert вы должны использовать assertесли вы знаете, что ошибка никогда не встречается при выдаче пользователю (при условии правильного поведения других компонентов системы).Если существует какая-либо причина, по которой условие ошибки может быть вызвано вводом пользователя, вы должны сгенерировать исключение.

...