2011-02-03 64 views
0

我已經看過使用TDD和MVP模式創建小型應用程序的視頻。此視頻顯示在這裏:TDD模型視圖演示者使用MOQ

http://blog.jpboodhoo.com/content/binary/appliedTestDrivenDevelopmentPart3/appliedtestdrivendevelopmentpart3.swf

該視頻使用犀牛嘲笑,任何人都可以闡明如何使用起訂量來實現相同的測試。

因此,如果我在下面的代碼如何編寫測試(使用MOQ)來測試Init()方法?

public interface IGui 
{ 
    event eventhandler UpdateFromDataSource; 
} 

public class Gui :IGui 
{ 
    button.Click += delegate { UpdateFromDataSource(); } 
} 

public class GuiPresenter 
{ 
    IGui gui; 
    public GuiPresenter(IGui gui) 
    { 
     this.gui = gui; 
    } 

    public Init() 
    { 
     gui.UpdateFromDataSource += delegate {//something}; 
    } 
} 

由於

CA

回答

0

如果初始化()不產生任何期望的輸出,我不會打擾對GuiPresenter測試Init方法。

你想要測試什麼?

0

我想測試的GUI UpdateFromDataSource事件有一個有線起來的處理程序。所以我希望能夠創建GUI的模擬並測試當Init被調用時,Gui Mock對象的UpdateFromDataSource至少有一個事件處理程序。

我想對本視頻中的測試進行類似的測試。 http://blog.jpboodhoo.com/content/binary/appliedTestDrivenDevelopmentPart3/appliedtestdrivendevelopmentpart3.swf

該視頻使用犀牛模擬不Moq!

+0

你總是可以在事件轉換爲委託,然後斷言有多少應該出現狀態的變化。不記得要使用的確切成員,但我知道他們在那裏。也就是說,這些測試只驗證事件是否有聽衆。你仍然不知道他們是否是正確的聽衆,或者他們是否做對了。測試結果:點擊按鈕時你想要發生什麼。忘記那個視頻,這只是其中的一種。 – 2011-09-13 08:41:42

0

我對基於類似事件的方法有不好的經驗。正如你所發現的那樣,嘲笑和測試很難,但是你也正在用更難的代碼替換更簡單的代碼,而沒有真正獲得任何東西:你仍然必須編寫膠水代碼來激活這些事件。如果沒有正確發佈,事件也可能變成內存泄漏,或者因爲在代碼中導航更困難而導致討厭的錯誤。

我發現將這些事件轉換爲演示者方法並讓視圖直接調用它們更容易。測試起來比較容易,而且編寫測試對付嘲諷更加困難,這非常沒有意義。

0

所以你想測試Init是否將視圖的事件連接到演示者中相應的處理程序。

我想創建

  • 一個模擬視圖
  • 將它傳遞到演示實例
  • 例如提高模擬事件mockView.Raise(m => m.UpdateDataSource()+= null)
  • 驗證演示,如果處理程序(//something)被稱爲
相關問題