gpt4 book ai didi

java - 休息电话的单元测试

转载 作者:行者123 更新时间:2023-12-04 02:07:24 26 4
gpt4 key购买 nike

我目前对单元测试感到困惑,该方法调用其中的 REST 服务以向该服务发送状态消息。

我有这样的方法:

public void informService(String state, BusinessObject bus) {

Client client = null;
Response response = null;
try {

client = new ResteasyClientBuilder()
.establishConnectionTimeout(10L, TimeUnit.MINUTES)
.socketTimeout(10L, TimeUnit.MINUTES)
.build();

WebTarget target = client.target("my.url");

MyDTO dto = new MyDTO();
dto.state = state;

response = target.request("application/json").put(Entity.json(dto));

boolean ok = handleReturnCode(response.getStatus(), bus.getId());

if (!ok) {
throw new RuntimeException("Invalid status" + response.getStatus());
}

return ok;

} catch (Exception e) {
} finally {
try {
if (response != null) {
response.close();
}
if (client != null)
client.close();
} catch (Exception e) {
}
}

因此在该方法中有一个对在方法内评估的 REST 服务的调用。我如何对这种行为进行单元测试?

最佳答案

当针对网络服务进行单元测试时,总是将实际的网络调用移至另一个 Class 并将其隐藏在 Interface 之后。

然后您可以为该接口(interface)创建一个假对象。
然后在您的测试中注入(inject)虚假服务而不是真实服务。

//Interface for your service
public interface MyService{
void sendJson(JsonObject json, Callback callback);

interface Callback{
void onResult(int resultCode);
}
}

//Class you want to test
public void MyClass{
private MyService myService;

public MyClass(MyService myService){
this.myService = myService;
}

public void informService(String state, BusinessObject bus) {
//Do the network call with your service and handle the response
}

}

现在在您的测试中,您可以创建一个扩展 MyServiceFakeService 并返回您想要测试的任何响应代码。
当然,您也可以使用像 Mockito 这样的模拟框架来创建您的假货,而不必自己编写它们。

关于java - 休息电话的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42158464/

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