j'ai un contrôleur de repos de ressort qui tire un ApplicationEventtests d'intégration et d'événements d'application printemps
@RestController
public class VehicleController {
@Autowired
private VehicleService service;
@Autowired
private ApplicationEventPublisher eventPublisher;
@RequestMapping(value = "/public/rest/vehicle/add", method = RequestMethod.POST)
public void addVehicle(@RequestBody @Valid Vehicle vehicle){
service.add(vehicle);
eventPublisher.publishEvent(new VehicleAddedEvent(vehicle));
}
}
Et j'ai un test d'intégration pour le contrôleur, quelque chose comme
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = VehicleController.class,includeFilters = @ComponentScan.Filter(classes = EnableWebSecurity.class))
@Import(WebSecurityConfig.class)
public class VehicleControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private VehicleService vehicleService;
@Test
public void addVehicle() throws Exception {
Vehicle vehicle=new Vehicle();
vehicle.setMake("ABC");
ObjectMapper mapper=new ObjectMapper();
String s = mapper.writeValueAsString(vehicle);
given(vehicleService.add(vehicle)).willReturn(1);
mockMvc.perform(post("/public/rest/vehicle/add").contentType(
MediaType.APPLICATION_JSON).content(s))
.andExpect(status().isOk());
}
}
Maintenant, si je retire la ligne de publication de l'événement, les succès du test. Cependant, avec l'événement, il rencontre une erreur. J'ai essayé beaucoup de choses différentes, pour éviter ou passer la ligne dans les tests, mais rien n'y a aidé. Pourriez-vous s'il vous plaît me dire quelle est la bonne façon de tester un tel code? Merci à l'avance
Serait-il possible de voir la trace complète de la pile? –