Как выполнить юнит-тест для assert () не удалось? - PullRequest
1 голос
/ 17 января 2020

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

Я также знаю, что assert() - это макрос, поэтому, если код I ' m test-only only header, я теоретически мог бы написать какой-нибудь макрос замены, чтобы вызвать сбой, используя мою библиотеку юнит-тестирования ( doctest ).

Мой вопрос:

  • Возможно, в doctest уже есть какие-то средства для такого рода тестов?
  • Если нет, есть ли какой-то идиоматический c способ реализации assert-firing-tests? Возможно, с другими средами / библиотеками тестирования, которые я мог бы адаптировать?

Примечание: я заметил здесь, на SO , что у Google Test есть какое-то связанное средство, ASSERT_DEATH , но мне не ясно, что он делает то, что я хочу.

1 Ответ

2 голосов
/ 17 января 2020

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

В C ++ нет стандартного способа порождения подпроцессов. Стандарт не признает существование других процессов. Многозадачные операционные системы предоставят API для этого. В стандарте POSIX дочерние процессы могут быть созданы с помощью функции fork.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...