Rhino Mock和debug模式的区别是什么?

5
我的问题如下:
我有一个使用模拟的http上下文来进行MVC路由测试的MS单元测试。但是代码中使用了Rhino Mock的部分存在问题:
var httpContextMock = MockRepository.GenerateStub<HttpContextBase>();
httpContextMock.Stub(c => c.Request.AppRelativeCurrentExecutionFilePath)
   .Return(url);

在调试模式下,第二行会抛出异常: enter image description here 为什么会出现这样的错误?当没有调试器时,测试一切正常。
祝好。

你的存根行为被正确调用了吗?它返回了正确的值吗? - Merlyn Morgan-Graham
在调试模式下,由于异常无法检查。没有调试模式,代码似乎正常工作。File.AppendAllText(@"c:\debug.txt", httpContextMock.Request.AppRelativeCurrentExecutionFilePath)将正确的存根值写入文件。 - jwaliszko
2
奇怪。我期望它要么报错并且不工作,要么不报错。 - Merlyn Morgan-Graham
2
请发布整个单元测试代码,我认为错误在其他地方。 - sll
你可以尝试的另一种方法是抽象出你的上下文/会话数据:http://stackoverflow.com/questions/7631656/unit-testing-an-action-which-calls-session-object/7631760#7631760 - Merlyn Morgan-Graham
3个回答

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);

0

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

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

enter image description here


0
问题出在你的存根方法上。仅使用.Return()将只返回该值一次。如果您不关心存根应返回该值的次数,应使用.Return().Repeat.Any()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接