2010-07-16 44 views
0

我已經有了一個稍微複雜的方法,需要經過很好的測試。祕密醬汁的東西。好吧,也許不是那麼酷,但我不能100%確定如何去完成這些設置。這種情況源於我以前的問題here。我沒有使用過犀牛模擬器,所以我仍然不好/不知道語法,所以請隨時提出一些建議。嘲諷一種方法並返回不同的結果

Public Function GenerateAllNotifications(ByVal days As List(Of Integer)) As List(Of MailMessage) Implements INotificationService.GenerateAllNotifications 

    Dim someStuff = _someService.GetThingsThatExpireBetween(day1, day2) 

    'build some messages 

    Return messages 

End Function 

我在我的測試設置正在尋找這樣的...我知道這是不對的,雖然

Dim fakeStuff = New SomeItem() 

Dim fakeContext = New List(Of Provider) 
fakeContext.Add(fakeStuff) 
Dim someService = MockRepository.GenerateStub(Of ISomeService)() 
someService.Stub(Function(x) x.GetThingsThatExpireBetween(30, 60)).IgnoreArguments().Return(fakeContext.AsQueryable) 
_fakeNotificationService = New NotificationService(someService) 

我想做到的是返回一個execpted項目進行相應的服務。業務規則是基於給定到期的消息的集合。因此,如果某個實體在30天內過期,則該消息反映出,如果它是60,90,則將其放入消息中。我認爲我的問題是我需要每次都有不同的對象回來(someitem)......?

+0

您能否澄清一下您試圖實現的目標?也許至少粘貼處理消息的代碼大綱? – Grzenio 2010-07-16 13:32:35

+0

消息是最終結果,因此它不像獲取數據來正確構建這些數據那樣重要(這是一種過濾方法)。做出這個信息很簡單,但要做出正確的事情並不容易。我需要不同的對象返回每個GetThings,因爲它們會被過濾出來(這是預期的)...我開始懷疑是否需要根據輸入單獨返回每一個(30,60等) – jeriley 2010-07-16 13:46:12

+0

當你存根/模擬一個方法你指定你返回指定值的參數。你不能只定義一些存根嗎?如果你想有人幫助你,你真的需要粘貼一些簡化的代碼。 – Grzenio 2010-07-16 13:50:08

回答

0

看起來好像你試圖讓你的模擬行爲正確。如果你認爲你的模擬是爲被測試的類的行爲提供上下文,這可能會有所幫助。

  • 由於我模擬的行爲以一定的方式
  • 當我使用我的課
  • 那麼我期待這個結果

然後你就可以讓你的模擬它表現出不同的方式 - 不管爭論 - 並檢查你的班級在不同情況下的行爲是否恰當。您將針對每個環境進行新的測試。我經常名字我的測試中上下文的行爲後:

  • 應該給我一個空列表,如果沒有找到的東西
  • 應處理並返回被發現
  • 應該提供一個錯誤信息,如果事情該服務會拋出異常

等,只有駱駝殼和[Test]歸因。

這有幫助嗎?如果沒有,我可能誤解了這個問題 - 道歉。