Вымывание метода, который возвращает закрытый класс в RhinoMocks

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

_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();
   }
}

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

Ответы

Ответ 1

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

Ответ 2

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

enter image description here

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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

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