2011-09-08 137 views
5

我的問題是如下:犀牛模擬vs調試模式?

我有MS單元測試,它使用樁的http上下文進行mvc路由測試。但是,代碼(它使用犀牛模擬)一個部分是有問題的:

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

在調試模式下,第二線拋出異常:

enter image description here

爲什麼這樣的錯誤發生?雖然測試在沒有調試器的情況下被觸發,但一切正常。

Regards

+0

您的存根行爲是否被正確調用?它是否返回正確的值? –

+0

在調試模式下,我無法檢查是否有異常。沒有調試模式代碼似乎工作正常。 File.AppendAllText(@「c:\ debug.txt」,httpContextMock.Request.AppRelativeCurrentExecutionFilePath)將正確的存根值寫入文件。 – jwaliszko

+2

奇怪。我希望它要麼給出這個錯誤,不能工作,要麼不給出那個錯誤。 –

回答

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