【问题标题】:Mocking a method that returns a sealed class in RhinoMocks在 RhinoMocks 中模拟一个返回密封类的方法
【发布时间】:2010-10-30 05:33:37
【问题描述】:

运行此代码:

_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 中有解决方案),但是模拟一个返回密封类(字符串)的类有什么问题?

【问题讨论】:

  • 这应该可以工作,因为我经常模拟具有返回字符串的方法的接口。我怀疑你还有另一个问题。我们可以看到更多代码吗?
  • 它现在对我有用,不知道是什么问题。
  • 我在尝试调试时遇到了同样的问题。在没有调试的情况下运行正常。

标签: c# mocking rhino-mocks stub sealed


【解决方案1】:

您的代码可以正常工作。您可能有一些未显示的其他代码导致问题。在此处发布您的整个单元测试,我们将为您诊断问题。

【讨论】:

    【解决方案2】:

    我有同样的问题,我猜它必须是一些 VS Studio 调试设置或 rhino 模拟的访问权限不足。 我很确定这不是导致此问题的代码。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        当您没有在工具->选项->调试->常规下启用“仅我的代码”并且您有 CLR 异常,在调试->异常下选择了“抛出”时,就会发生这种情况。修复它的最简单方法是在工具->选项->调试->常规下启用“只是我的代码”。

        【讨论】:

          【解决方案5】:

          我同意 - 这不是代码的问题。 这是VS调试设置。

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

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

          异常得到处理,代码/模拟按预期工作,只需按 F5

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-01-11
            • 1970-01-01
            • 2011-01-02
            • 1970-01-01
            • 1970-01-01
            • 2019-08-18
            • 1970-01-01
            相关资源
            最近更新 更多