MockHttpServletResponse возвращает пустое тело - PullRequest
0 голосов
/ 22 февраля 2019

Вот мой контроллер

@RestController
@RequestMapping(value = Routes.SEND_FCM)
public class AdminFcmController {

private final FCMService fcmService;

@Autowired
public AdminFcmController(FCMService fcmService) {
    this.fcmService = fcmService;
}

@ResponseStatus(HttpStatus.CREATED)
@PostMapping(value = "/admin/logs/add")
public AdminFcmResource addBulkFcmLog(@RequestBody BulkFcmDataResource adminFcmResource) {
    return fcmService.addBulkFcmLog(adminFcmResource);
}
}

Я пытаюсь смоделировать поведение fcmService в вышеуказанном контроллере.Поэтому я сменил fcmService и ввел его в AdminFcmController, как показано ниже.

@RunWith(MockitoJUnitRunner.class)
public class AdminFcmControllerTest {

    protected MockMvc mockMvc;
    @InjectMocks
    AdminFcmController adminFcmController;

    @Mock
    FCMService fcmService;
    private JacksonTester<BulkFcmDataResource> bulkFcmDataResourceJacksonTester;

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        mockMvc = MockMvcBuilders.standaloneSetup(adminFcmController)
                .build();
    }

    @Test
    public void addBulkFcmLog() throws Exception {
        JacksonTester.initFields(this, new ObjectMapper());

        AdminFcmResource adminFcmResource = AdminFcmResource.builder()
                .adminId(123L)
                .build();

        given(this.fcmService.addBulkFcmLog(any(BulkFcmDataResource.class))).willReturn(adminFcmResource);

         mockMvc.perform(
                post(Routes.SEND_FCM + "/admin/logs/add")
                        .accept(MediaType.APPLICATION_JSON)
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(bulkFcmDataResourceJacksonTester.write(BulkFcmDataResource.builder().adminId(123L).build()).getJson()))
                .andExpect(status().isCreated())
                .andDo(print());

   }

Я использовал для этого тестирование BDD, я также пытался использовать методы mockito when.then и doReturn.when, но они такжевернуть пустое тело.Я также попытался использовать объектный картограф для создания jacksonConverter, но это также не удалось.Есть ли какая-либо причина для пустого тела?

Если так, каким будет решение?

Это вывод, который я получаю

MockHttpServletRequest:
      HTTP Method = POST
      Request URI = /api/ns/fcm/admin/logs/add
       Parameters = {}
          Headers = {Content-Type=[application/json], Accept=[application/json]}

Handler:
             Type = com.esewa.ns.firebase.AdminFcmController
           Method = public com.esewa.ns.firebase.resource.AdminFcmResource com.esewa.ns.firebase.AdminFcmController.addBulkFcmLog(com.esewa.ns.firebase.resource.BulkFcmDataResource)

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 201
    Error message = null
          Headers = {}
     Content type = null
             Body = 
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

Обновление:

Когда я использую @RunWith (SpringRunner.class) и @SpringBootTest вместе с @AutoWired и @MockBean, тест, похоже, работает.Но я не понимаю как.Есть ли объяснение этому?

...