Как я могу проверить "if (somecondition) return;" заявление? - PullRequest
1 голос
/ 05 октября 2009

Используя NUnit 2.5 в VS 2008, я не уверен, как протестировать эту функцию просто return; s, когда установлено какое-то условие. Есть ли метод Assert, который служит моей цели, или это не тестируемый?

Ответы [ 4 ]

4 голосов
/ 05 октября 2009

Ну, предположительно, есть некоторая заметная разница между функцией, которая просто возвращает, и тем, что она что-то делает перед возвратом. Проверьте эту наблюдаемую разницу.

Если не , то наблюдаемой разницы между тем, что он только что возвратился, и тем, что он этого не делает, вы либо имеете дело с обычно «трудным для тестирования» битом кода (например, кешированием), где Эффект не работает, или вы должны спросить себя, почему вы взяли этот код.

1 голос
/ 05 октября 2009

Какой код стоит после оператора return? Изменяет ли это какие-либо данные? Я обычно проверяю, не опровергнуты ли данные, которые обрабатываются на после .

Чтобы дать вам пример, если я рекурсивно пересекаю дерево на основе некоторого условия по имени узла, я явно проверю, что

  1. узлов, которые должны были быть посещены, были посещены, и,
  2. узлов, которые не были посещены, были , а не .
0 голосов
/ 05 октября 2009

Иногда вы сталкиваетесь с подобными вещами, когда у вас есть функция, единственной задачей которой является получение одного или нескольких объектов, делегирование некоторых вызовов, а затем возврат.

Способ проверки с помощью Mocks - создайте макет переданного объекта, проверьте макет, чтобы убедиться, что ожидаемые вызовы действительно были выполнены (что и является целью вашей функции).

Если ожидаемые звонки не были сделаны до возврата, ваш тест не пройден, иначе он пройдет.

Остерегайтесь, хотя этот тип теста опасно близок к знанию реализации.

0 голосов
/ 05 октября 2009

Возможно, вам стоит рассмотреть использование фиктивных объектов?

Например, используя Moq , вы можете сделать что-то вроде:

// Called at least once
mock.Verify(foo => foo.Execute("ping"), Times.AtLeastOnce());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...