我正在开发一个具有 MVP 架构的 Android 应用程序,我已经能够测试 Presenter 和 Model 类,但现在我正在尝试测试 View 方法。 例如,我有以下观点:
public interface SplashView extends BaseMVPView {
void initPresenter();
void navigateToHome();
void onError(ApiError apiError);
}
由 Activity 实现。
public class SplashActivity extends BaseActivity implements SplashView {
// MVP Presenter
private SplashPresenter splashPresenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initPresenter();
}
@Override
public int getLayoutId() {
return R.layout.activity_splash;
}
@Override
public void destroy() {
if(splashPresenter != null) {
splashPresenter.onDestroy();
splashPresenter = null;
}
}
@Override
public void initPresenter() {
if(splashPresenter == null) {
splashPresenter = new SplashPresenterImpl(this, ApiClient.getService());
sync();
}
}
@Override
public void navigateToHome() {
NavigationUtils.navigateToActivity(this, MainActivity.class, true);
}
@Override
public void onError(ApiError apiError) {
DialogUtils.showOKCancelDialog(...);
}
private void sync() {
if(splashPresenter != null) {
splashPresenter.sync();
}
}
}
如您所见,创建 Activity 时,它会初始化演示器并调用一个方法,该方法将从 API 获取一些数据。 API 调用完成后,演示者将调用 navigateToHome 或 onError 方法。所以我想为这两种情况测试这个过程。我想这一定是一个仪器测试,但我不知道如何处理这种情况,以及如何调用这些方法。
非常感谢
最佳答案
首先,我建议将您的 MVP 架构与一些 Dagger 依赖注入(inject)的味道混合起来,这确实有助于测试和模拟。您可以使用我在 Github 上发布的示例了解更多信息,该示例还包含不同类型的测试:
顺便说一下,在这种类型的开发中,您必须模拟您的 SplashPresenter 并将其插入而不是真实的,这样您就可以用模拟的演示者来更改真实的演示者来执行您想要的操作。
为此,您必须扩展 Activity 并覆盖 initPresenter 方法:
class MockSplashActivity extends SplashActivity {
@Override
public void initPresenter() {
if (splashPresenter == null) {
splashPresenter = new MockSplashPresenterImpl(this, ApiClient.getService());
sync();
}
}
}
并且还扩展了您的演示者并更改了您想要在测试中按照您想要的方式行事的方法(我认为您想使用同步方法做一些事情):
class MockSplashPresenterImpl extends SplashPresenterImpl {
public MockSplashPresenterImpl(SplashActivity splashActivity, Object service) {
super(splashActivity, service);
}
@Override
public void sync() {
splashActivity.doSomethingYouWant();
}
}
希望对你有帮助:)
关于android - 仪器测试对 MVP 的看法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39971863/