Есть ли способ шпионить, если метод перехватил исключение, используя Moq.NET? - PullRequest
0 голосов
/ 01 апреля 2019

Мой оригинальный метод выглядит примерно так: псевдокод:

public bool IsValid(){
  try{
   // logic
  } catch (Exception){
   return false;
  }
}

Каждый раз, когда моя логика генерирует исключение любого типа, будет возвращено false. Например, в моих модульных тестах я передаю пустую строку и затем утверждаю, что возвращаемое значение равно false. Тем не менее, есть ли способ также проверить, что исключение было выдано, даже если оно было перехвачено?

1 Ответ

1 голос
/ 01 апреля 2019

Для этого вам не нужна библиотека для насмешек.Это на самом деле не вопрос технологии, а логический.Рассмотрим ваше утверждение:

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

Подтверждение того, что возвращаемое значение являетсяfalse.Без насмешек, без копания во внутренностях каркаса, ничего из этого.Помня о том, что мы не знаем, что «логика» заключается в этом методе, идея состоит в том, что на этапе «Упорядочить» вашего модульного теста будет создан сценарий, в котором логика и исключение будут вызывать исключение.Шаг «Утверждение» подтвердит, что false является результатом операции.

Учтите, что модульные тесты сами по себе просто потребляют код для компонента.Они не должны знать или заботиться о внутренностях этого компонента.То, что у вас есть, - это сценарий, в котором вы определяете две противоречивые вещи:

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

Одна из этих двух вещей должна измениться.

Обратите внимание, что вам не обязательно нужноизмените возвращаемое поведение метода для изменения этой проверяемой проверки.Например, вы можете просто ввести зависимость ведения журнала для компонента и в своем блоке catch зарегистрировать исключение.Затем ваш модульный тест может смоделировать эту зависимость и утверждать, что исключение было зарегистрировано.

По сути, ваши модульные тесты проверяют наблюдаемые извне результаты операции.Таким образом, чтобы подтвердить что-то, оно должно быть внешне наблюдаемым.Либо как выброшенное исключение, либо возвращаемое значение, либо вызванная операция над зависимостью, либо какое-либо другое наблюдаемое изменение состояния системы.Если вам нужно это наблюдать, то нужно что-то заметить.Или, если это не должно делать ничего наблюдаемого, вам не нужно это наблюдать.

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