Насмешка над методом, который возвращает запечатанный класс в RhinoMocks - PullRequest
17 голосов
/ 31 мая 2009

Запуск этого кода:

_foo = MockRepository.GenerateStub<IBar>();
_foo.Stub(x => x.Foo()).Return("sdf");

Когда

public interface IBar
{
   string Foo();
}

public class Bar : IBar
{
   public string Foo()
   {
      throw new NotImplementedException();
   }
}

создает исключение NotSupportedException - «Не удается создать макеты запечатанных классов». Я понимаю, почему нельзя смоделировать запечатанный класс (хотя в TypeMock есть решения), но что за проблема с насмешкой над классом, который возвращает запечатанный класс (строку)?

Ответы [ 5 ]

26 голосов
/ 10 января 2012

Rhino Mocks, похоже, ловит и обрабатывает это исключение. Вы видите его в отладчике VS.NET только в том случае, если вы включили исключения в качестве точек останова. Похоже, что вы можете безопасно продолжить работу после этой точки останова исключения, и все это работает как положено.

2 голосов
/ 24 июля 2013

Это происходит, когда вы НЕ включили «Просто мой код» в меню «Инструменты-> Параметры-> Отладка-> Общие», и у вас есть исключения CLR, «Отброшенный» выбран в разделе «Отладка-> Исключения». Самый простой способ исправить это - включить «просто мой код» в меню «Сервис-> Параметры-> Отладка-> Общие».

enter image description here

1 голос
/ 28 ноября 2011

У меня та же проблема, это, наверное, какая-то настройка отладки VS-студии или какие-то недостаточные права доступа для насмешек носорога. Я вполне уверен, что это не код, который вызывает это.

1 голос
/ 20 июля 2009

Ваш код работает правильно. Скорее всего, у вас есть другой код, который не показан, который вызывает проблему. Опубликуйте здесь весь свой модульный тест, и мы диагностируем проблему для вас.

0 голосов
/ 16 апреля 2015

Второе - это не проблема с кодом. Это настройка VS отладки.

Я получаю то же исключение при отладке в приведенном ниже коде при попытке отправить Arg.Is.Anything в качестве параметра заглушке.

mockPermissionManager.Stub(item => item.HasAccess(Arg<string>.Is.Anything)).Return(true);

Исключение обрабатывается и код / ​​макет работает, как и ожидалось, просто сделайте F5

...