SpringBootTest/WebMvcTest не вызывает валидатор в теле запроса

Я пытаюсь протестировать контроллер таким образом, чтобы он запускал проверку объекта тела запроса на основе валидаторов, которые я определил для объекта. Ниже приведены соответствующие классы. Если вы заметили мой тестовый метод, я ожидаю плохой запрос на основе определенного валидатора, но по какой-то причине он напрямую пытается выполнить службу, что не ожидалось, и поэтому у меня нет определенного макета для службы и, следовательно, я получить исключение 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());
   }

}


person Sayantan    schedule 05.09.2019    source источник
comment
Почему у вас есть аннотация @Validated в верхней части вашего компонента?   -  person cmlonder    schedule 05.09.2019
comment
На самом деле у меня была включена групповая проверка, поэтому фактические атрибуты разделены на группы, в которых они будут проверяться только как часть этой группы.   -  person Sayantan    schedule 05.09.2019


Ответы (1)


Возможно вам не хватает пакета javax.el

http://hibernate.org/validator/documentation/getting-started/

<dependency>
   <groupId>org.glassfish</groupId>
   <artifactId>javax.el</artifactId>
   <version>3.0.1-b09</version>
</dependency>
person cjlp    schedule 05.09.2019