我有以下的測試,以驗證我的倉庫被調用它的相應的會話(我已經重寫它突出的實際問題):如何聲明Rhino Mocks調用的通用方法?
[Test]
public void Why_Does_This_Fail()
{
var objectUnderTest = new SomeGenericsProblem();
var fakeSession = MockRepository.GenerateMock<ISession>();
fakeSession.Expect(s => s.Query<SomeClass>());
objectUnderTest.NotWorking<SomeClass>();
fakeSession.AssertWasCalled(t => t.Query<SomeClass>());
}
但是當我運行測試,我得到這樣的:
System.InvalidOperationException: 無效的調用,最後調用一直使用 或者沒有來電的情況下(讓 確保您調用虛 (C#)/可重寫(VB)方法)(C#)/。 Overridable(VB)方法)。
任何想法我在這裏做錯了嗎?我嘲笑的會話是一個接口,所以它有是虛擬/可覆蓋。
我有一種感覺,它與我的查詢方法是一個通用的事實有關,但我不知道任何其他方式來表達我想要測試的東西。
而且,如果我刪除,設置了預期(即這行代碼:)
fakeSession.Expect(s => s.Query<SomeClass>());
我得到一個不同的異常這是同樣困惑我的部分:
系統.InvalidOperationException:否 期望被設置爲 驗證,確保方法調用 中的動作是虛擬的(C#)/ 覆蓋(VB.Net)方法calloverridable(VB.Net)方法調用
我在測試中沒有看到任何錯誤。您是否嘗試刪除UnitOfWork並查看它是否有幫助?我想知道是否有你的Repository.Query或uow.Commit方法內的東西,使測試失敗。我將你的測試方法複製粘貼到我自己的項目中,讓ReSharper創建UnitOfWork,Repository和ISession。測試通過確定。我正在使用版本3.5的Rhino Mocs。 – 2010-09-09 16:55:13
@Mikael我必須在那裏有工作單元,因爲如果不是,那麼當我創建存儲庫時,它會拋出無效操作異常(按設計)。我刪除了提交,並得到了同樣的結果。我的repository.Query方法實際上只是調用Session.Query,這就是它的全部功能。 – Joseph 2010-09-09 17:06:56
我剛從頭開始用相同的設計重寫了測試,但是使用了我自己的POCO,它仍然給我帶來了同樣的錯誤。 – Joseph 2010-09-09 18:28:04