2010-11-19 85 views
3

可以說我有這個使行動被調用在Silverlight單元測試與MOQ

_articlesService.SaveAsync(Model, AddressOf OnSaveCompleted) 

的OnSaveCompleteMethod做了幾件事情,很明顯。它的一個

Protected Overridable Sub OnSaveCompleted(ByVal asyncValidationResult As AsyncValidationResult) 

在我的單元測試。我需要運行一個模擬的SaveAsync,並且無論如何都調用OnSaveCompleted,因爲該方法發出我需要知道的事件已發送。

現在,代碼只是走過該方法,因此它從未執行過。

需要幫助解決這個問題,因爲我現在被卡住了。

+0

不可能與VB.net限制最小起訂量的原因缺乏相同的支持c#的匿名方法。 – Einarsson 2010-11-22 12:11:49

回答

1

如果我理解你的背景下右:

  • 你必須在其使用ArticlesService
  • 您ArticlesService(一個合作類)的測試類是負責發送某些事件
  • 要驗證被測試的班級行爲正確
  • 你想通過檢查事件來做到這一點。

如果是這樣,你可能會讓你的班級負責超過它的需要。您只需驗證ArticlesService是否被要求保存同步。您不必擔心ArticlesService會發生什麼事情。

想想這樣。你是一個被測班。你有太多的工作要做,所以你已經請了其他人來幫助你。你有兩個選擇。你可以追逐他們,擔心他們是否做得對,或者你可以信任他們。

您可以編寫一個單獨的測試,它提供ArticlesService工作方式的一些示例,它將檢查ArticlesService是否正確地執行作業。您的CUT的責任是有效地委託該工作。

如果你確實需要提高,這樣你的CUT可以響應的事件,這是其行爲的不同方面,你可以用起訂量的「提高」的方法,在「事件」記錄做,在這裏:

http://code.google.com/p/moq/wiki/QuickStart

編輯:您還可以使用「回調」,記錄了同一鏈路上,做的東西與ARGS被傳遞給你,包括OnSaveCompleted。不知道它是否會有所幫助;沒有代碼和失敗的測試,看看你在做什麼很棘手。無論如何,祝你好運!

0

關閉,但不完全如此。

我們實際上並沒有在ArticleService中發送一個事件。

SaveAsync方法需要保存文章,並且保存完成後調用一個方法。

問題是「OnSaveCompleted」 - 方法沒有被調用。(該方法存在於View Model Base類中,所以服務不發送事件,視圖模型是。)。

但是我們有我們自己的WCF服務代理實現,所以這可能是我們搞的,因爲我們不使用生成的代碼。

認爲我們將不得不爲了解決這個問題而重新修復我們的服務基礎設施。

所以這是一個特殊情況,只是想拋出問題以防萬一。 :)

無論如何感謝您的答案。

+0

啊,我明白了。編輯我的答案與另一個可能會有所幫助的建議... – Lunivore 2010-11-22 07:30:51

+0

回調肯定是要走的路,認爲我們只需要修改inftrastructure一點點就可以使這個測試良好的方式。感謝您的幫助:)將標記爲答案。 – Einarsson 2010-11-22 08:56:03

+0

另外,有趣的事情。現在發現問題,模擬不會工作屬性。這是因爲我的僱主強迫我們使用VB.net,即使我們已經把他們數千次的bug都告訴了C#在每一點上都更好。那麼,VB.NET不適用於MOQ。所以再次,狗屎VB是問題。 :( – Einarsson 2010-11-22 09:26:20