Полученный (количество) NSubstitute всегда зеленый (при издевательстве над конкретным классом) - PullRequest
0 голосов
/ 07 июня 2018

Редактировать: В ходе работы я также выделил, что проблема заключается только в том, чтобы высмеивать конкретный класс, а не интерфейс, поэтому я редактирую заголовок.

Контекст

Кажется, что NSubstitute .Received (...) всегда зеленый, независимо от того, произошел ли вообще какой-либо вызов.Чтобы изолировать эту проблему, я создал двухстрочный модульный тест, и на самом деле ничего не вызывает , все равно проверка на 10 полученных вызовов зеленая:

 var processor = Substitute.For<Processor>();
 processor.Received(10).Process(Arg.Any<MyType>()); // this is green (do not throws)

Использование последней стабильной версии 3.1.0

Вопрос

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

1 Ответ

0 голосов
/ 07 июня 2018

NSubstitute будет работать только с виртуальными участниками в классе.Из Создание замены :

Предупреждение: Замена классов может иметь некоторые неприятные побочные эффекты.Для начала NSubstitute может работать только с виртуальными членами класса, поэтому любой не-виртуальный код в классе будет фактически выполняться!Если вы попытаетесь заменить ваш класс, который форматирует ваш жесткий диск, в конструкторе или в невиртуальном установщике свойств, то вы напрашиваетесь на неприятности.Если возможно, придерживайтесь заменяющих интерфейсов.

Это означает, что вы можете использовать .Received(), When()..Do() и .Returns только для элементов, помеченных как виртуальные.При замене интерфейса все члены будут работать нормально.

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