java - Android:JUnit + Mockito,测试回调?

标签 java android unit-testing junit mockito

我有一个正在开发的 Android 应用程序,并尝试为其编写单元测试。该应用程序是使用 MVP 架构编写的,我正在尝试测试 Presenter 类。

我尝试测试的简化方法如下所示:

public void userPressedButton() {
    service.loadData(new Callback<Data>{
        @Override
        onResponse(Data data) {
            view.showData(data);
        }
    });
}

现在我想验证当 userPressedButton 方法被调用时 view.showData(data) 被调用。

我尝试了几种方法,但我似乎无法弄清楚如何测试它。

有什么想法吗?

编辑:澄清一下,我想写一个单元测试

最佳答案

有趣的案例。

我会做的是:

1) - 为那个特定的回调创建一个具体的类:

public class MyCallback implements Callback<Data>{

    private View view;

    public MyCallback(View view){
        this.view = view;
    } 

    @Override
    onResponse(Data data) {
        view.showData(data);
    }
}

现在对于这个类,您可以编写一个单元测试来检查 onResponse 方法是否调用了 view 字段的 showData 方法。

2) 将实现提取到具体类之后,从包含userPressedButton 方法的类的角度来看,在回调类。 传递该接口(interface)的具体实现很重要:

public void userPressedButton() {
    service.loadData(new MyCallback(view));
}

最后是测试:

@InjectMocks
MyClass myClass;

@Mock
Service service;

@Captor
ArgumentCaptor argCaptor;

@Before
public void init(){
     MockitoAnnotations.initMocks(this);
}

@Test
public void shouldUseMyCallback(){
     // Arrange

     // set up myClass for test

     // Act
     myClass.userPressedButton();

    Mockito.verify(service).loadData(argCaptor.capture());

    // Assert
    assertTrue(argCaptor.getValue instance of MyCallback);
}

所以我们检查 loadData 方法是否被正确调用。

这就是我测试你的案例的方式。

关于java - Android:JUnit + Mockito,测试回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42561067/

相关文章:

python - 构建处理 redis 和 cache_method 装饰器的测试

javascript - 在 AngularJS 单元/集成测试中向 HTTP 服务器发出真实请求

linux - 在 unix 中转置一个文件

java - 正确配置spring security oauth2

java - RecyclerView,notifyItemRemoved有时会删除无效项目,notifyDataSetChanged工作完美

java - Firebase 电话身份验证

android - 如何将 byte[] 列表传递给另一个 Activity

java - 如何通过改造在RecyclerView中实现分页?

java - Java使用内部类的方法引用

java - 为什么 JOptionPane.showInputDialog 被调用的次数超过了应有的次数,为什么以及如何防止它