2017-11-14 5 views
0

Ich habe einen Rest Steuerung, die Parameter com.querydsl.core.types.Predicate hat, das mit Anmerkungen versehen wird @QuerydslPredicateREST Endpunkt mit @QuerydslPredicate Predicate spöttischen Test

ResponseEntity<List<Employee>> listEmployees(@QuerydslPredicate(root = Employee.class) Predicate predicate) { 
    List<Employee> employees = employeeService.listEmployees(predicate); 
    return new ResponseEntity<>(employees , HttpStatus.OK); 
} 

Ich habe meine Einheit Test mit Feder Läufer. Mein Komponententest sieht so aus:

@Test 
public void test_listEmployees() throws Exception { 
    List<Employee> employees = singletonList(employee); 

    given(employeeService.listEmployees(any(Predicate.class))).willReturn(employees); 

    mockMvc.perform(get(EMPLOYEE_PATH) 
      .contentType(MediaType.APPLICATION_JSON)) 
      .andExpect(status().isOk()) 
      .andExpect(jsonPath("$", hasSize(1))) 
      .andExpect(jsonPath("$[0].employeeId", is(employee.getEmployeeId()))) 
      .andExpect(jsonPath("$[0].employeeName", is(employee.getEmployeeName()))); 
} 

Bei der Testausführung des Geräts erhalte ich die folgende Ausnahme.

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.querydsl.core.types.Predicate]: Specified class is an interface 

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:65) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) 
at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:160) 
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127) 
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127) 
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127) 
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:127) 
at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:155) 

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.querydsl.core.types.Predicate]: Specified class is an interface 
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:99) 
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:141) 
at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:81) 
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:101) 
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) 
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:158) 
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:128) 
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
... 47 more 

Jede Hilfe wird geschätzt.

bearbeiten

ist meine Controller-Klasse mit

kommentieren
@RestController 
@RequestMapping(value = "employees") 

Und meine Controller-Methode wird mit Anmerkungen versehen mit

@RequestMapping(
     method = RequestMethod.GET 
) 
+0

Ich glaube, Sie haben Prädikat autowire oder einen echten erstellen und in das Verfahren zu geben. – Patrick

+0

Das Autowire-Prädikat kann nicht automatisch generiert werden, sondern muss seine Instanz erstellen. Es hat nicht funktioniert. – Maz

+0

Warum können Sie kein Autowire-Prädikat ausgeben? Sie können keine Instanz des Prädikats selbst erstellen. Es ist eine Schnittstelle. – Patrick

Antwort

2

Nach einer Pause für ein paar Tage zu nehmen und versuchen, das zu verstehen, Problem, ich fand heraus, dass es kein Problem mit Mockito given Funktion ist. Vielmehr ist es ein Problem mit mockmvc.perform Betrieb. Ich habe es gelöst, indem ich in meiner Testklasse @EnableSpringDataWebSupport Annotation aus dem Paket spring-data-commons hinzugefügt habe.

Hurrrayyyyy

Verwandte Themen