Если можешь - исключи статические звонки.Например, путем явного введения 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
.
Однако, если изменение кода не вариант, у вас есть другие варианты:
макетировать статические вызовы с помощью Powermock
использует тот факт, что 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
}
}