我已经切换到 MVP 架构并正在尝试对其进行测试。我对如何构建我的 Presenter 有一些疑问。
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()、doB() 和 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() 方法中应该做的事情。