Вот мой контроллер
@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, тест, похоже, работает.Но я не понимаю как.Есть ли объяснение этому?