如何使用泛型类型模拟响应实体<?>?



我需要模拟服务。 我在嘲笑班级时ResponseEntity<?>resp 中得到 null。

需要模拟的方法:

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);

注意事项:

避免在@Service class内使用ResponseEntity。您应该在@RestController class中使用ResponseEntity

您可以使用@Autowired注释Inject@Service class,例如:

@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将处理ResponseRequest对象。因此,我们有了Single Responsibility原则。


一些不错的链接:

  • Spring MVC - 使用 RequestEntity 和 ResponseEntity
  • 如何模拟 REST 模板
  • 使用 Spring 构建 REST 服务
  • 了解单一责任原则

希望这有帮助!

相关内容

  • 没有找到相关文章

最新更新