Как написать тест junit для контроллера rest с вызовом статического метода - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь написать тестовый класс для контроллера, у которого есть статический вызов метода. Я использовал шаблон производителя верблюда, чтобы получить результат.

Я пробовал с Mockito, но ни один из них не работал для меня:

@RestController
@Api(consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public class TestController{

    @Autowired
    ProducerTemplate producerTemplate;
    @ApiOperation(value = "getdata", notes = "", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
    @PostMapping("/getData" )
    public ApiResponse<Data> getData(@RequestBody DataRequest request, @RequestHeader HttpHeaders headers, HttpServletResponse response) {
        return ApiUtil.makeCall(producerTemplate, "direct:getdata", request,
                headers, response);
    }
}


public static ApiResponse makeCall(ProducerTemplate producerTemplate, String routerName, Object request,
                                            HttpHeaders headers, HttpServletResponse response) {
    HashMap<String, Object> headersMap = null;

    ApiResponse apiResponse = producerTemplate.requestBodyAndHeaders(routerName, request, headersMap, ApiResponse.class);

    response.setStatus(apiResponse.getHttpCode());

    return apiResponse;
}

Как я могу создать модульный тест для этого контроллера статическим методом?

1 Ответ

1 голос
/ 11 июня 2019

С Макито должно быть все в порядке (если ProducerTemplate не является последним классом):

@Mock 
private ProducerTemplate producerTemplateStub;

@InjectMocks
private TestController testConstrollerSUT;

@Test
public void test() throws Exception(){

    // Arrange
    when(producerTempalteStub.requestBodyAndHeaders(
           eq(routerName), eq(request), any(Map.class), eq(ApiResponse.class)))
    .thenReturn(myResponse)

Суть в том, что статический метод достаточно тривиален, поэтому его не нужно подшучивать.

...