Как проверить утверждения? - PullRequest
3 голосов
/ 13 июня 2011

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

например. в классе Table я хочу убедиться, что число строк и столбцов не превышает количество строк и столбцов таблицы. Давайте предположим, что я забыл проверить на cols. Я хотел бы, чтобы мои модульные тесты выполнили тест, в котором должно срабатывать утверждение, а если нет, провалить тест. Это возможно?

Ответы [ 3 ]

2 голосов
/ 13 июня 2011

Есть три возможных пути:

  • преобразование утверждений в исключения или

  • запускает каждый тест отдельной программой, чей код выхода вы (или, скорее, фреймворк) проверяет, или

  • позвольте утверждению, которое срабатывает, напишите информацию о себе, которую затем может взять тестовая структура.

Насколько мне известно, ни одна коммерческая или широко используемая среда модульного тестирования не поддерживает последние два способа. Я использовал проверку кода завершения процесса для хобби-программирования, но только с небольшой платформой персонального модульного тестирования, реализованной на Python и C ++ («хобби-программирование»: это означает, что у меня нет хороших данных о том, насколько хорошо он масштабируется для крупномасштабного программирования). Основной случай тестирования кода выхода из процесса - это когда в коде есть статические утверждения, которые вы хотите быть уверенными в том, что они запускаются, когда они предназначены.

Подводя итог, с существующими тестовыми средами, преобразование в исключение - AFAIK ваш единственный вариант.

Ура & hth.

2 голосов
/ 13 июня 2011

Тогда возникает вопрос: планируете ли вы рефакторинг своего кода, чтобы в случае возникновения этого условия вы выдавали исключение, а не полагались на функциональность <cassert>, чтобы выявить проблему?Если это так, вы можете просто проверить, что было сгенерировано исключение.Если нет, тогда будет сложнее проверить утверждение assert из <cassert>.Среды модульного тестирования, такие как CUTE, содержат макрос ASSERT_THROWS только для тестирования исключений.Я бы проверил ваши рамки.

Кроме того, в магазинах, где я работал, они не одобряют отстаивают и предпочитают исключения.Вызов abort не помогает автоматическому тестированию.На самом деле, это запрещает.Просто мои два цента.

0 голосов
/ 13 июня 2011

Ответ зависит от используемой вами тестовой среды и, вероятно, будет найден при очень небольшом поиске в Google.

Первое попадание для «повышения теста теста юнитов» указывает на этот вопрос в StackOverflow: Тестирование для подтверждения в среде Boost Test

Второе попадание для теста «cppunit»assert "указывает на эту страницу документации: Создание утверждений

Попробуйте поискать в Интернете вашу конкретную структуру.

...