我有一个正在开发的 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/