2012-02-17 17 views
1

我有一個演示者類,它將在成功執行後產生新的演示者和視圖。在產生下一個演示者/視圖之前,執行一些我希望進行單元測試的業務邏輯。我的問題是,當我的單元測試執行時,我無法避免出現實際的GUI窗口。如何在未出現GUI的情況下單元測試生成另一個視圖的演示者?

下面是一些僞代碼,演示了這個問題:

// View1 and Model are interfaces 
public Presenter1(View1 view, Model model) { 
    // .... 
} 


public void handleOKClick() { 
    // Method triggered by view 

    String data = view.getSomeUserInput(); 
    // ... business logic I wish to test 


    if (shouldLoadNextView) { 
    // Business logic concluded the next view should be loaded 

    View2 nextView = new View2Impl(); 
    Presenter2 nextPresenter = new Presenter2(nextView, model); 
    nextView.setPresenter(nextPresenter); 
    nextView.showView(); 
    } 
} 

在我的單元測試,我可以嘲笑View1Model情況下,我傳遞給我的Presenter1構造。然後,我可以檢查我的業務邏輯是否與預期相一致。我目前不能做的是防止顯示下一個視圖,因爲我的Presenter1實例將構建一個具體的實現View2並顯示它。

我覺得我只剩下三個選擇:

  1. 更改我的類的設計。也許構造函數應該將View2作爲參數,允許我爲了測試的目的而嘲笑它。

  2. 找到一個狡猾的方法來殺死我的單元測試代碼中的視圖,一旦出現。我不知道如何最好地做到這一點。

  3. 對我的項目類設計做出更基本的改變,以便演示者不會以這種方式產生新的視圖。

回答

1

時間已經過去了,我從那時起就採用了選項1.當他們可能不需要時,預構造視圖感覺很笨重,但同樣我的視圖類是輕量級且便宜構造的。

1

如果我是你,我會去的選項3,讓你的演講通過與其他觀看賽事交流,所以你可以讓他們鬆耦合和演示將變得更容易測試和容易實現。

+0

建議將事件作爲替代通信方法不能解決其他視圖如何實例化的問題。 – 2012-02-20 08:20:09

相關問題