[英]How to unit-test a presenter in a MVP
我有一個模型視圖演示者三合一。 我想知道測試演示者的常用方法是什么。
我想到的第一件事是實例化演示者並實例化一個真實的視圖,然后斷言視圖將完成預期的行為。
public void itShouldSayHello() {
View view = new View();
Presenter presenter = new Presenter(view);
presenter.userSaid("hello");
assertTrue(view.getGreeting().equals("hello"));
}
然后我認為視圖沒有經過測試,因此我創建了一個假視圖。
private String greeting;
public void itShouldSayHello() {
View view = new FakeView();
Presenter presenter = new Presenter(view);
presenter.userSaid("hello");
assertTrue(greeting.equals("hello"));
}
private class FakeView implements View {
@Override
public void displayGreeting(String saluto) {
greeting = saluto;
}
}
然后我認為視圖的界面可能會改變。 這將使代碼難以維護。 所以我編寫了測試並斷言要將某些內容呈現給視圖。 這樣即使接口改變了,我也不得不在測試中改變一行代碼。
public void itShouldSayHello() {
View view = mock(View.class);
Presenter presenter = new Presenter(view);
presenter.userSaid("hello");
verify(view).displayGreeting("hello");
}
所以我現在測試的基本上是我希望演示者收集並處理一些信息並最終將其傳遞給視圖,然后我驗證傳遞的值是否正確。
所以我想我現在不使用假的,我正在使用模擬然后我驗證模擬是否收到正確的值。
我遇到的另一個問題是模型。 但我認為這是不可逾越的。 我要做的就是要確定演示者是否正常運行是為了創建一個大的脂肪夾具。 然后傳遞所有各種組合,看看演示者的行為是否正確。
你如何測試你的演示者?
您可以利用視圖/演示者的分離來測試演示者。 如果您已完全實現MVP,您的View將實現一個接口,您的Presenter將使用該接口將數據返回到View。 如果您正在測試MVP應用程序,您不僅需要Presenter正常運行,還需要View用於與Presenter通信的界面。
因此,您的測試類應實現View的接口,調用Presenter的方法,並從覆蓋接口的本地方法存儲Presenter的響應。 如果Presenter同步與業務層通信,則更容易:
如果您的Presenter異步通信,則必須執行類似等待測試方法並通過接口方法進行通知的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.