Assert.DoesNotThrow с NUnit - как получить трассировку стека? - PullRequest
9 голосов
/ 16 июня 2011

Я использую NUnit для модульного тестирования (работает с TD.NET).

При использовании Assert.DoesNotThrow я получаю исключение, но без какой-либо трассировки стека, что затрудняет выявление проблемы с корнем.

Как мне справиться с этим?

Ответы [ 2 ]

11 голосов
/ 16 июня 2011

Assert.DoesNotThrow является избыточным, если тест бросает, тест автоматически провалится без подтверждения.По моему скромному мнению, уточнить то, что проверяется, лучше в названии метода испытания.Синтаксис Assert.DoesNotThrow не дает существенных преимуществ при документировании и, как вы отмечаете, только затрудняет исправление неудачных тестов.

Кроме того, если у вас очень длинный тест с несколькими утверждениями, Assert.DoesNotThrowвыполняет важную роль, чтобы утверждать, что правильный блок кода вызвал исключение.Однако в этом случае более подходящим решением является проверка возможности сокращения теста и / или переноса утверждений в свои собственные тесты.

3 голосов
/ 16 июня 2011

Я сомневаюсь, что это действительно отвечает на ваш вопрос, но я бы сократил тест до одной ситуации, чтобы вам не нужно было оборачивать какой-то код в делегат, который вы передаете Assert.DoesNotThrow. Затем просто напишите тест без каких-либо утверждений. Тест, который выдает неожиданное исключение, завершится неудачей, поэтому он будет делать то, что вы хотите, и вы получите полное исключение.

Примерно 10% моих тестов работают так; нет утверждений вообще, а имена методов, такие как ThisOrThatShouldNeverThrow().

Другим вариантом при отладке является запуск теста в отладчике (используя TD.Net) и в разделе «Отладка | Исключения» установите дополнительные флажки, чтобы отладчик останавливался при возникновении исключения.

...