【发布时间】:2020-02-12 19:40:25
【问题描述】:
我正在尝试模拟我的控制器调用的方法,如下所示:
@Post(value = "/blah", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@Transactional
public HttpResponse<Object> createBlah(HttpHeaders httpHeaders,
@Body @Valid CreateBlahRequest createBlahRequest) {
HttpResponse<Object> createBlahResponse;
(...)
createBlahService(...) // what i am trying to mock
return HttpUtils.getResponse(HttpStatus.CREATED, createBlahResponse.body());
}
在我的测试中,我正在测试如下:
@Mock
public BlahController blahController;
public HttpResponse<Object> resp = HttpResponse.created((Object) new AccountResponse()).status(HttpStatus.OK);
@BeforeAll
public void configureAppContext() {
Application.APPLICATION_CONTEXT = applicationContext;
MockitoAnnotations.initMocks(this);
}
@Test
void createBlah(){
MutableHttpRequest<CreateBlahRequest> request = HttpRequest
.POST("/blah", createBlahRequest)
.header("requestId", "1");
when(blahController.createBlah(eq(request.getHeaders()), eq(createBlahRequest))).thenReturn(resp);
HttpResponse<CreateBlahRequest> blahRes = client.toBlocking().exchange(request, CreateBlahRequest.class);
}
但是,当客户端调用控制器时,它似乎与我的测试中的 (when) 不匹配,它继续按原样运行。如果有人可以就此提供一些建议,将不胜感激。
【问题讨论】:
-
您没有向我们展示足够的代码来找出答案。我看不到
client在测试中是如何被实例化的,我也看不到 createBlah 是如何被调用的(我假设在客户端某处) -
client只是一个RxHttpClient,createBlah是从client调用controller调用的,具体路径匹配createBlah
-
和
createBlahRequest? stackoverflow.com/help/minimal-reproducible-example -
我不确定你的意图是什么,但看起来你想要做的是将真正的控制器完全排除在外,在这种情况下你的测试不会测试你的任何代码来自测试本身的代码。这是你的意图吗?
-
@JeffScottBrown 的目的是测试控制器的端点调用是否有效。我想模拟其中方法的行为,因为它调用了我想模拟的外部 API。我只是想测试端点命中
标签: java testing mockito micronaut