我有一個演示者類,它將在成功執行後產生新的演示者和視圖。在產生下一個演示者/視圖之前,執行一些我希望進行單元測試的業務邏輯。我的問題是,當我的單元測試執行時,我無法避免出現實際的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();
}
}
在我的單元測試,我可以嘲笑View1
和Model
情況下,我傳遞給我的Presenter1
構造。然後,我可以檢查我的業務邏輯是否與預期相一致。我目前不能做的是防止顯示下一個視圖,因爲我的Presenter1
實例將構建一個具體的實現View2
並顯示它。
我覺得我只剩下三個選擇:
更改我的類的設計。也許構造函數應該將
View2
作爲參數,允許我爲了測試的目的而嘲笑它。找到一個狡猾的方法來殺死我的單元測試代碼中的視圖,一旦出現。我不知道如何最好地做到這一點。
對我的項目類設計做出更基本的改變,以便演示者不會以這種方式產生新的視圖。
建議將事件作爲替代通信方法不能解決其他視圖如何實例化的問題。 – 2012-02-20 08:20:09