我正在尝试增加Android上的代码覆盖率。但是我找不到测试此演示者的正确方法。 onSelectContact进行服务调用,后来我的ServiceFactory.getContactService进行另一个调用。我该如何模拟这个电话?
id date amount balance
4 2019-09-06 -31.00 5000
3 2019-09-04 15.00 5031
2 2019-09-04 15.00 5016
1 2019-09-03 -16.00 5001
答案 0 :(得分:0)
如果可以-消除静态呼叫。例如,通过将ContactService
显式注入被测类:
public class ContactListPresenter {
private final ContactService contactService;
public ContactListPresenter(ContactService contactService) {
this.contactService = contactService;
}
// rest of the code
protected Call<JsonElement> getCorrespondingContactCall(final User user) {
return StringUtils.isValidEmail(user.getEmail())
? contactService.checkContactByEmail(user.getEmail())
: contactService.checkContactByPhoneNumber(user.getPhoneNumber());
}
}
这样,在测试中,您将能够轻松模拟通过调用Call<JsonElement>
返回的contactService
。
但是,如果不能更改代码,则还有其他选择:
通过在测试中创建匿名子类并存根调用getCorrespondingContactCall
的结果,来利用protected
具有getCorrespondingContactCall
访问权限的事实。例如:
public class ContactListPresenterTest {
@Test
public void test() {
User user = ... // create user for test
ContactListPresenter presenter = new ContactListPresenter() {
@Override
Call<JsonElement> getCorrespondingContactCall(final User user) {
return ... // stub result of the call
}
};
presenter.onSelectContact(user);
// assert expected behavior
}
}