Mockito 没有在测试中模拟来自控制器的功能
Mockito not mocking function from controller in test
我正在尝试模拟我的控制器调用的方法,如下所示:
@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) 不匹配,它继续按原样 运行。如果有人能对此提出建议,将不胜感激。
对于看到此内容的任何人,我必须注入该方法调用的 class。
在控制器中它调用另一个服务 class 所以我这样嘲笑它:
@Inject
public BlahService BlahService;
@MockBean(BlahService.class)
public BlahService blahService(){
return Mockito.mock(BlahService.class);
}
而且效果很好。
我正在尝试模拟我的控制器调用的方法,如下所示:
@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) 不匹配,它继续按原样 运行。如果有人能对此提出建议,将不胜感激。
对于看到此内容的任何人,我必须注入该方法调用的 class。 在控制器中它调用另一个服务 class 所以我这样嘲笑它:
@Inject
public BlahService BlahService;
@MockBean(BlahService.class)
public BlahService blahService(){
return Mockito.mock(BlahService.class);
}
而且效果很好。