模拟在RhinoMocks中返回密封类的方法

时间:2009-05-31 11:01:23

标签: c# mocking rhino-mocks stub sealed

运行此代码:

_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 个答案:

答案 0 :(得分:26)

Rhino Mocks似乎正在捕捉并处理此异常。如果您已将异常作为断点启用,则只能在VS.NET调试器中看到它。看起来您可以安全地继续运行此异常断点,并且一切都按预期工作。

答案 1 :(得分:2)

如果您没有在工具 - >选项 - &gt;调试 - &gt;常规下启用“仅我的代码”,并且您有CLR异常,在Debug-&gt; Exceptions下选择了“Thrown”,则会发生这种情况。最简单的解决方法是在工具 - &gt;选项 - &gt;调试 - &gt;一般情况下启用“仅我的代码”。

enter image description here

答案 2 :(得分:1)

您的代码正常运行。您可能还有一些其他代码未显示导致问题。在这里发布您的整个单元测试,我们将为您诊断问题。

答案 3 :(得分:1)

我有同样的问题,它必须是一些VS工作室调试设置或我猜的犀牛模拟的一些不充分的访问权限。 我很确定它不是造成这种情况的代码。

答案 4 :(得分:0)

我认为 - 这不是代码问题。 这是VS调试设置。

在调试下面的代码时遇到同样的异常,同时尝试将Arg.Is.Anything作为参数发送到存根。

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

处理异常并且代码/模拟按预期工作,只需执行F5