aga*_*con 6 java spring-cloud-feign
我正在尝试实现一个涉及 FeignClient 调用的单元测试,该调用应返回 404 Not Found。
由于 Feign 抛出了 404 异常,那么实现这个测试用例的正确方法是什么?
我正在尝试这样的事情......
when(mockedApiClient.userDataDelete(anyString()))
.thenThrow( ... );
Run Code Online (Sandbox Code Playgroud)
我应该扔什么?
Dee*_*and 12
Feign 已经提供了像 NotFound 和其他典型的 HTTP 响应代码类型这样的内部类。此处显示了一个示例。
Request request = Request.create(Request.HttpMethod.GET, "url",
new HashMap<>(), null, new RequestTemplate());
throw new FeignException.NotFound("", request, null);
Run Code Online (Sandbox Code Playgroud)
根据您的需要修改上面的内容即可!需要注意的关键一点是 Request 对象是强制性的。截至 2021 年,一些重载(例如 Request.create)已被弃用。注意你用的是什么!
希望有帮助!快乐编码!
嘲笑你的FeignException:
var ex = Mockito.mock(FeignException.class);
Mockito.when(ex.status()).thenReturn(404);
Mockito.when(mockedApiClient.userDataDelete(anyString()))
.thenThrow(ex);
Run Code Online (Sandbox Code Playgroud)
小智 5
好吧,对我来说工作如下(我使用 EasyRandom 作为某些字段的生成器):
private EasyRandom easyRandom = new EasyRandom();
Map<String, Collection<String>> headersError = easyRandom.nextObject(HashMap.class);
byte[] bodyError = easyRandom.nextObject(byte[].class);
when(mockedApiClient.userDataDelete(anyString())
.thenThrow(FeignException.errorStatus(
"userDataDelete",
Response.builder()
.status(404)
.reason("message error")
.request(Request.create(
Request.HttpMethod.POST,
"foo/foo/bar/v1/delete-data-user",
headersError, //this field is required for construtor//
null,
null,
null))
.body(bodyError)//this field is required for construtor
.build())
);
Run Code Online (Sandbox Code Playgroud)
除非提供任何其他更好的解决方案,这就是我克服这个问题的方法......
when(mockedApiClient.userDataDelete(anyString()))
.thenThrow(FeignException.errorStatus(
"userDataDelete",
Response.builder()
.status(404)
.headers(new HashMap<>())
.reason("Not found").build()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24801 次 |
| 最近记录: |