gpt4 book ai didi

java - 如何测试多个服务调用

转载 作者:行者123 更新时间:2023-11-28 21:36:37 25 4
gpt4 key购买 nike

我正在尝试增加我在 Android 上的代码覆盖率。但是我找不到正确的方法来测试这个演示者。 onSelectContact 进行服务调用,稍后我的 ServiceFactory.getContactService 进行另一个调用。我怎样才能模拟这个电话?

public class ContactListPresenter {

public void onSelectContact(User user) {
getCorrespondingContactCall(user).enqueue(new Callback <JsonElement>() {
@Override
public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
switch (response.code()) {
case case1:
goToFirstActivity(user, response);
break;
case case2:
goToSecondActivity(user, response);
break;
default: showInvalidInput(user);
break;
}
}

@Override
public void onFailure(Call<JsonElement> call, Throwable throwable) {
if (getView() != null) {
getView().showErrorView();
}
}
});
}

protected Call<JsonElement> getCorrespondingContactCall(final User user) {
return StringUtils.isValidEmail(user.getEmail())
? ServiceFactory.getContactService().checkContactByEmail(user.getEmail())
: ServiceFactory.getContactService().checkContactByPhoneNumber(user.getPhoneNumber());
}

}

最佳答案

如果可以 - 消除静态调用。例如,通过显式注入(inject) 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通过在测试中创建匿名子类并 stub 调用 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
}

}

关于java - 如何测试多个服务调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58143239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com