Я пытаюсь протестировать контроллер таким образом, чтобы он запускал проверку объекта тела запроса на основе валидаторов, которые я определил для объекта. Ниже приведены соответствующие классы. Если вы заметили мой тестовый метод, я ожидаю плохой запрос на основе определенного валидатора, но по какой-то причине он напрямую пытается выполнить службу, что не ожидалось, и поэтому у меня нет определенного макета для службы и, следовательно, я получить исключение NullPointerException, поскольку объект службы является нулевым, поскольку он издевается. Я попытался заменить WebMvcTest на SpringBootTest, основываясь на некоторых предложениях, которые я гуглил и переполнял стек, но ничего не помогло. Что может быть возможной причиной?
Объект запроса
@Validated
public class RequestBean implements Serializable {
private static final long serialVersionUID = -8976713543478074839L;
@NotNull
private Long id;
@NotNull
private String name;
@NotEmpty
private List<Long> statusIds;
// getters and setters
}
Контроллер
@RestController
public class SomeController {
@Autowired
private SomeService service;
@PostMapping(value = "/resources", produces = MediaType.APPLICATION_JSON_VALUE)
public List<VerDealProductBean> fetchResources(
@Valid @RequestBody RequestBean request)
throws SomeException {
return service.doSomething(request);
}
Тест контроллера
@RunWith(SpringRunner.class)
@WebMvcTest(SomeController.class)
@ActiveProfiles("test")
public class SomeControllerTest {
private MockMvc mockMvc;
@MockBean
private SomeService service;
@Before
public void setUp() {
this.mockMvc = MockMvcBuilders.standaloneSetup(SomeController.class)
.build();
}
@Test
public void testFetchResourcesWithNoInput() throws Exception {
String request = "{\"id\": null}";
mockMvc.perform(post("/resources")
.contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)
.content(request))
.andDo(print())
.andExpect(status().isBadRequest());
}
}