jUnit: не найден основной или конструктор по умолчанию для интерфейса com.querydsl.core.types.Predicate - PullRequest
0 голосов
/ 04 июня 2018

У меня есть restcontroller внутри Spring-приложения, возвращающего список объектов ...

@GetMapping
@Override
public ResponseEntity readAll(@QuerydslPredicate(root = Entity.class) Predicate predicate, Pageable pageable){
    ...
}

Если я его запускаю, все работает нормально.Я могу отфильтровать запрос по странице и предикату.Но если я запускаю тест junit, он завершается ошибкой ...

@Test
public void readAllTest(){
MockMvcBuilders.standaloneSetup(*myController*)
            .build().perform(MockMvcRequestBuilders.get(*myUri*)
                    .accept(MediaType.APPLICATION_JSON_UTF8_VALUE)
            )
            .andExpect(status().isOk())
            .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE));
}

Получение следующего сообщения об ошибке ... org.springframework.web.util.NestedServletException: Обработка запроса не удалась;Вложенное исключение - java.lang.IllegalStateException: не найден основной или конструктор по умолчанию для интерфейса com.querydsl.core.types.Predicate

Кто-нибудь знает, как протестировать restcontroller с Pageable иПредикат

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

На данный момент вам просто нужно настроить mockMvc с ApplicationContext, например

@RunWith(SpringRunner.class)
@SpringBootTest
public class ControllerTest {

  @Autowired
  private WebApplicationContext webApplicationContext;

  @Test
  public void readAllTest() throws Exception {
    MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build()
        .perform(MockMvcRequestBuilders.get("YOUR_URI")
        .accept(MediaType.APPLICATION_JSON_UTF8_VALUE))
        .andExpect(status().isOk())
        .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE));
  }

}

https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#spring-mvc-test-server

0 голосов
/ 23 июля 2018
  1. Попробуйте добавить аннотацию к тестовому классу @ Import (QuerydslWebConfiguration.class) .Он добавляет преобразователь аргументов контроллера для com.querydsl.core.types.Predicate в контекст весны.

  2. Но после того, как вы столкнетесь сисключение типа:

    Не найден основной или конструктор по умолчанию для интерфейса org.springframework.data.domain.Pageable.

  3. Существует аннотация, загружает преобразователи аргументов для обоих этихинтерфейсы. org.springframework.data.web.config.EnableSpringDataWebSupport

Addapted для вашего тестового класса:

@RunWith(SpringRunner.class)
@WebMvcTest(*myController*.class)
@EnableSpringDataWebSupport
public class ControllerTest{

  @Test
  public void readAllTest(){
    MockMvcBuilders.standaloneSetup(*myController*)
            .build().perform(MockMvcRequestBuilders.get(*myUri*)
                    .accept(MediaType.APPLICATION_JSON_UTF8_VALUE)
            )
            .andExpect(status().isOk())
            .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE));
  }
}
...