如何测试多个服务呼叫

时间:2019-09-28 03:58:36

标签: java android testing junit android-espresso

我正在尝试增加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

1 个答案:

答案 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

但是,如果不能更改代码,则还有其他选择:

  • 使用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
   }

}