我已經切換到MVP架構並試圖對其進行測試。我對如何構建Presenter有一些疑問。MVP,測試和私有方法
public class Presenter
{
public void onResume()
{
doA();
doB();
doC();
}
protected void doA() {};
protected void doB() {};
protected void doC() {};
}
public class MyScreen implements MyScreenView
{
private Presenter presenter;
public MyScreen()
{
presenter = new Presenter(this);
}
public OnResume()
{
presenter.OnResume();
}
}
在上面的代碼中,當該視圖被恢復時,視圖只是調用呈現的onResume()。演示者在內部調用3個方法doA(),doB()和doC()來完成它所要做的任何事情。
或者,我可以叫DOA(),出生日期()和DOC()在視圖中直接像這樣:
public class Presenter
{
public void doA() {};
public void doB() {};
public void doC() {};
}
public class MyScreen implements MyScreenView
{
private Presenter presenter;
public MyScreen()
{
presenter = new Presenter(this);
}
public OnResume()
{
presenter.doA();
presenter.doB();
presenter.doC();
}
}
我的問題是,它更容易爲我測試第二個解決方案,因爲主持人完全分解成3個獨立的公共個人責任方法,我可以單獨爲doA,doB和doC編寫測試,而不是針對解決方案1的演示者.onResume()方法的單個測試。
在第一個解決方案,我必須爲onResume()編寫測試,它負責調用這3個方法。這意味着它更難測試,因爲它比調用其他私有函數的函數更容易測試個別責任的小函數。然而,第二種解決方案並不像我想的那樣是一個很好的MVP,因爲它似乎知道主講人在做什麼,只是不讓主持人在第一個解決方案的onResume()方法中執行它應該做的事情。
絕不要在stackoverflow上尋求意見。它是保證解決問題的關鍵。當然,所有值得高興或低估的都是意見,但這是一個不同的故事。 –