繁体   English   中英

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) 匹配,它继续按原样运行。 如果有人可以就此提出一些建议,将不胜感激。

对于任何看到这一点的人,我必须注入该方法调用的类。 在控制器中,它调用另一个服务类,所以我像这样嘲笑它:

@Inject
public BlahService BlahService;

@MockBean(BlahService.class)
public BlahService blahService(){
    return Mockito.mock(BlahService.class);
}

它工作正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM