java - 如何使用泛型模拟 ResponseEntity?
问题描述
我需要模拟一项服务。ResponseEntity<?>
我在嘲笑班级时得到了空值。
需要模拟的方法:
public List<Expression> getExpression(String expressView, Localdate date) {
List<Expression> =new ArrayList<>();
Map<String, Object> uri = new HashMap<>();
UriComponenetsBuilder build =
UriComponentsBuilder.fromHttpUrl("someUrl" + "/" + expressView);
build.queryParam(someParameter, someParameter);
build.queryParam(someParameter, someParameter);
build.queryParam(someParameter, someParameter);
HttpHeaders header = new HttpHeaders();
header.setContentType(MediaType.APPLICATION_JSON);
RestClient client = new RestClient(
build.build().encode.toUriString, HttpMethod.GET.Uri, header
);
ResponseEntity<?> resp = restC.SomeMethod(client);
if (resp = !null) {
//it goes to these line
}
}
在我的模拟方法中:
when(restC.SomeMethod(client)).thenReturn(resp);
所以上面的方法调用一个服务获取一些数据,获取 expressView 的值并保存为列表。当我嘲笑when(restC.SomeMethod(client)).thenReturn(resp);
它击中 URL 的方法时,我作为响应得到的值resp
是 null 。所以在这里我得到的resp
价值为null
。我在邮递员中检查了 URL(someUrl) 它返回的值。
如何模拟ResponseEntity<?>
?
谢谢。
解决方案
首先,创建一个ResponseEntity
对象:
HttpHeaders header = new HttpHeaders();
header.setContentType(MediaType.APPLICATION_JSON);
ResponseEntity<?> responseEntity = new ResponseEntity<>(
"some response body",
header,
HttpStatus.OK
);
然后构建一个模拟来返回responseEntity
对象:
when(restC.SomeMethod(client)).thenReturn(responseEntity);
注意点:
避免在
ResponseEntity
里面使用@Service class
。你应该ResponseEntity
在@RestController class
.
您可以Inject
使用@Service class
注释@Autowired
,例如:
@RestController
public class YourControllerClass {
@Autowired
private YourServiceClass yourServiceClass;
或使用constructor
,例如:
@RestController
public class YourControllerClass {
private YourServiceClass yourServiceClass;
public YourControllerClass(YourServiceClass yourServiceClass) {
this.yourServiceClass= yourServiceClass;
}
所以:
@Service class
将处理business or data objects
并将@RestController class
处理Response
和Request
对象。这样我们就有了Single Responsibility
原则。
一些不错的链接:
希望这可以帮助!
推荐阅读
- oracle - Could not execute impdp command from docker exec command
- laravel - Create pdf for signature list using Laravel and dompdf
- android - Can I run Apache Flink within an Android App?
- java - Spring boot Controller Advice not getting called on Exception
- ios - How to pass arguments to mac terminal in llldb mode
- go - 在 go build 中使用“-race”标志时发生了什么
- javascript - Could not establish connection. Receiving end does not exist chrome extension
- arp - arpspoofing and ARP table
- android - 如何在 CameraX 的实时 PreviewView 上应用颜色过滤器?
- c# - 中间件未正确处理 403,但正在正确处理 404