Ich versuche, eine Spring-Rest-Controller-Klasse mit JUnit, Mockito, Federtest und Spring Security Test zu testen. Das Folgende ist meine Ruhe-Controller-Klasse, für die ich den Test durchführe;Mockito-Fehler: Eigentlich gab es keine Interaktionen mit diesem Mock
@RestController
public class EmployeeRestController {
@Autowired
private EmployeeService employeeService;
@PreAuthorize("hasAnyRole('ROLE_EMPSUPEADM')")
@RequestMapping(value = "/fetch-timezones", method = RequestMethod.GET)
public ResponseEntity<List<ResponseModel>> fetchTimeZones() {
List<ResponseModel> timezones = employeeService.fetchTimeZones();
return new ResponseEntity<>(timezones, HttpStatus.OK);
}
}
Das Folgende ist meine Testklasse;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SpringConfiguration.class})
@WebAppConfiguration
public class EmployeeRestControllerUnitTest {
private MockMvc mockMvc;
@Autowired
private WebApplicationContext webApplicationContext;
@Mock
private EmployeeService employeeService;
@InjectMocks
private EmployeeRestController employeeRestController;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
Mockito.reset(employeeService);
mockMvc = MockMvcBuilders
.webAppContextSetup(webApplicationContext)
.build();
}
@Test
@WithMockUser(roles = {"EMPSUPEADM"})
public void testFetchTimezones() {
try {
mockMvc.perform(get("/fetch-timezones"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(jsonPath("$", hasSize(4)));
verify(emploeeService, times(1)).fetchTimeZones();
verifyNoMoreInteractions(employeeService);
} catch (Exception e) {
e.printStackTrace();
}
}
}
machte ich die oben Test-Klasse von vielen Tutorials beziehen. Das Problem ist, dass ich nicht alles klar verstehen kann. Also habe ich die folgenden Zweifel.
Ich bin ein Modell von EmployeeService zu schaffen und es in EmployeeRestController Injektion @InjectMocks verwenden, dann, warum ich die folgende Versagen bekommen;
Wanted but not invoked: careGroupService.fetchTimeZones(); -> at com.example.api.test .restcontroller.EmployeeRestControllerUnitTest .testFetchTimezones(EmployeeRestControllerUnitTest.java:73) Actually, there were zero interactions with this mock.
Wie funktioniert MockMvcBuilders.webAppContextSetup (WebApplicationContext) .build(); funktioniert genau.
Ich weiß, dass MockMvcBuilders.standaloneSetup (employeeRestController) zum Testen einzelner Controller-Klassen und Feder-Konfiguration für diese Methode nicht verfügbar ist. Wie können wir für diese Methode eine Federkonfiguration bereitstellen, ist das möglich?
Schließlich, wie funktioniert dieses Stück Code: Mockito.reset (employeeService); funktioniert.
Hallo, danke für deine Antworten. Aber ich bekomme immer noch die gleiche Fehlermeldung. – karthi
Entschuldigung, ich benutze keinen Springboot. – karthi
Vielen Dank für Ihre Hilfe, ich konnte es erreichen, indem Sie einen ** Test Kontext ** wie in diesem [Link] vorgeschlagen (https://stackoverflow.com/questions/37369768/should-mockito-be-used-with -mockmvcs-webappcontextsetup-in-spring-4) – karthi