- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在开发一个具有 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/
我正在编写一个应用程序,用户可以在其中上传 .rdf 文件,然后对其执行 SPARQL 查询。现在我陷入了如何格式化查询结果的困境。例如:ASK-查询输出 boolean 值,SELECT-查询返回结
我有一个非常大的表(将近 2,000,000 条记录)拆分为 2 个较小的表。一张表只包含上周的记录,另一张表包含所有其余的(很多......) 现在我得到了一些存储过程/函数,用于在拆分之前查询大表
我是 iOS UI 开发的新手。我陷入了以下问题。 我试图将父 View 宽度的一半分配给 2 个 subview 。 (见图)。我不能将乘数设置为小于零。红色和绿色 subview 的宽度应相等,宽
我是一名优秀的程序员,十分优秀!