Исключение нулевого указателя в MockMvc.perform в классе @Test - PullRequest
0 голосов
/ 07 июня 2019

Я пишу для написания модульного теста для моего RestController (POST) и получаю исключение NullPointerException в строке mvc.perform (...).

Вот мой RestController:

@RestController
@EnableAutoConfiguration
public class MyController {

@Autowired
private Service1 service;

@Autowired
RestTemplate restTemplate;

@RequestMapping(value = "/logError", method = RequestMethod.POST, produces = {MediaType.APPLICATION_JSON_VALUE})
@ResponseBody
public ResponseEntity ErrorHandlor(@RequestBody JSONStructure jsonStructure) throws Exception{


    service.getDocument(jsonStructure.getID(), jsonStructure.getLog());

    return new ResponseEntity(HttpStatus.OK);

   }

}

А вот мой тестовый класс:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {MyController.class, 
Service1.class, AppConfig.class})
@WebMvcTest(MyController.class)
public class MyControllerTest {

private MockMvc mockMvc;

@MockBean
private RestTemplate restTemplate;
MyController service = new MyController();

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

@Test
public void testController() throws Exception{

    ObjectMapper mapper = new ObjectMapper();

    String url = "http://localhost:8080/logError";

    JSONStructure structure = new JSONStructure();
    structure.setNumber("num");
    structure.setID("id");
    structure.setLog("log");

    String json = mapper.writeValueAsString(structure)
    this.mockMvc.perform
    (MockMvcRequestBuilders.post("http://localhost:8080/logError")
    .contentType(MediaType.APPLICATION_JSON)
    .content(json))
    .andExpect(MockMvcResultMatchers.status().isCreated())
    .andReturn();

}

}

Я получаю NPE в строке, содержащей this.mockMvc.perform (...).

Кто-нибудь может указать, в чем может быть проблема?

1 Ответ

0 голосов
/ 08 июня 2019
  1. При использовании @RunWith (SpringRunner.class) используйте @Autowired MockMvc mockmvc.
  2. При использовании @RunWith (MockitoJunitRunner.class) или MockitoAnnotations.initMocks (this) тогда используйте this.mockMvc = MockMvcBuilders.standaloneSetup (service) .build ();

Не смешивайте бегунов Spring и Mockito.

...