Sti*_*ive 8 java junit web-services mockito spring-boot
我需要模拟一项服务。我ResponseEntity<?>在嘲笑班级时得到了空值。
需要mock的方法:
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
}
}
Run Code Online (Sandbox Code Playgroud)
在我的模拟方法中:
when(restC.SomeMethod(client)).thenReturn(resp);
Run Code Online (Sandbox Code Playgroud)
因此,上述方法调用服务获取一些数据,获取expressView的值并将其保存为列表。当我模拟该方法时,when(restC.SomeMethod(client)).thenReturn(resp);它命中了 URL,但我得到的响应值resp是 null 。所以我在这里得到的resp值为null。我检查了邮递员中的 URL(someUrl) 它返回的值。
如何嘲笑ResponseEntity<?>?
谢谢。
Jul*_*edo 16
首先,创建一个ResponseEntity对象:
HttpHeaders header = new HttpHeaders();
header.setContentType(MediaType.APPLICATION_JSON);
ResponseEntity<?> responseEntity = new ResponseEntity<>(
"some response body",
header,
HttpStatus.OK
);
Run Code Online (Sandbox Code Playgroud)
然后构建一个模拟来返回responseEntity对象:
when(restC.SomeMethod(client)).thenReturn(responseEntity);
Run Code Online (Sandbox Code Playgroud)
注意点:
ResponseEntity避免在室内使用@Service class。你应该使用ResponseEntity在@RestController class.
Inject您可以@Service class使用@Autowired注释,例如:
@RestController
public class YourControllerClass {
@Autowired
private YourServiceClass yourServiceClass;
Run Code Online (Sandbox Code Playgroud)
或者使用 constructor ,例如:
@RestController
public class YourControllerClass {
private YourServiceClass yourServiceClass;
public YourControllerClass(YourServiceClass yourServiceClass) {
this.yourServiceClass= yourServiceClass;
}
Run Code Online (Sandbox Code Playgroud)
所以:
@Service class将处理business or data objects并将@RestController class处理Response和Request对象。这样我们就有Single Responsibility原则了。
一些不错的链接:
希望这可以帮助!