【问题标题】:Rhino Mock vs debug mode?犀牛模拟与调试模式?
【发布时间】:2011-11-12 19:06:56
【问题描述】:

我的问题如下:

我有 ms 单元测试,它使用 stubbed http 上下文进行 mvc 路由测试。但是有一部分代码(使用 rhino mock)是有问题的:

var httpContextMock = MockRepository.GenerateStub<HttpContextBase>();
httpContextMock.Stub(c => c.Request.AppRelativeCurrentExecutionFilePath)
   .Return(url);

在调试模式下,第二行抛出异常:

为什么会出现这样的错误?虽然在没有调试器的情况下触发了测试,但一切正常。

问候

【问题讨论】:

  • 你的存根行为是否被正确调用?它是否返回正确的值?
  • 在调试模式下,由于异常,我无法检查。如果没有调试模式,代码似乎可以正常工作。 File.AppendAllText(@"c:\debug.txt", httpContextMock.Request.AppRelativeCurrentExecutionFilePath) 将正确的存根值写入文件。
  • 很奇怪。我希望它要么给出那个错误而不工作,要么不给出那个错误。
  • 发布整个单元测试代码,我想错误在其他地方
  • 您可以尝试的另一种方法是抽象出您的上下文/会话数据:stackoverflow.com/questions/7631656/…

标签: c# .net asp.net-mvc unit-testing rhino-mocks


【解决方案1】:

这真的很奇怪。对我来说奇怪的是您的代码在非调试模式下工作。 Request 属性没有被存根,因此您无法真正知道它会返回什么。您可以尝试以下方法:

var httpContextMock = MockRepository.GenerateStub<HttpContextBase>();
var httpRequestMock = MockRepository.GenerateStub<HttpContextBase>();
httpContextMock.Stub(c => c.Request).Return(httpRequestMock); 
httpRequestMock.Stub(c => c.AppRelativeCurrentExecutionFilePath).Return(url);

【讨论】:

    【解决方案2】:

    我的也遇到了这个问题,并通过删除解决方案的.suo 文件来修复它。

    在切换Break when Common Language Runtime Exception is thrown 设置时,我似乎也遇到了不同的异常,该设置存储在suo 文件中(调试菜单-> 异常)

    【讨论】:

      【解决方案3】:

      问题在于您的存根方法。通过只使用.Return(),它只会返回这个值一次。如果你不关心存根应该返回多少次你应该使用.Return().Repeat.Any()。

      【讨论】:

        猜你喜欢
        • 2011-02-15
        • 1970-01-01
        • 2010-11-07
        • 2010-10-29
        • 2016-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多