Je suis novice dans les tests unitaires utilisant JUnit et Mockito dans le framework de démarrage Spring. Je veux tester cette méthode. Comment tester POST Méthode de demande:
// add Employee
@RequestMapping(method = RequestMethod.POST)
public void addEmployee(@RequestBody Employee employee){
this.employeeService.addEmployee(employee);
}
Merci d'avance
Comme @ merve-sahin l'a souligné à juste titre, vous pouvez utiliser @WebMvcTest pour y parvenir.
Regardez l'exemple suivant:
@RunWith(SpringRunner.class)
@WebMvcTest(YourController.class)
public class YourControllerTest {
@Autowired MockMvc mvc;
@MockBean EmployeeService employeeService;
@Test
public void addEmployeeTest() throws Exception {
Employee emp = createEmployee();
mvc.perform(post("/api/employee")
.contentType(MediaType.APPLICATION_JSON)
.content(toJson(emp)))
.andExpect(status().isOk());
}
}
Dans le code ci-dessus, vous pouvez vous moquer de votre service dépendant en utilisant @MockBean. Le test effectuera la publication sur votre objet Employé personnalisé et validera la réponse
Vous pouvez ajouter des en-têtes, l'autorisation lors de l'appel de perform
En supposant que vous utilisez JSON comme type de support, vous pouvez écrire la méthode toJson () en utilisant n'importe quelle bibliothèque json pour convertir l'objet Employee au format de chaîne Json
private String toJson(Employee emp) {
Si vous utilisez XML, vous pouvez faire de même pour XML
Vous pouvez valider la réponse en utilisant les attentes de manière chaînée. Comme indiqué à juste titre, veuillez vérifier le lien MockedMvc qui devrait vous aider
Parcourez cet exemple suivant:
@RunWith(SpringJUnit4ClassRunner.class)
public class ApplicationControllerTest {
@Mock
EmployeeService employeeService;
private MockMvc mockMvc;
@Before
public void setUp() throws Exception {
initMocks(this);
YourController controller = new YourController(employeeService);
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
}
@Test
public void addEmployee() throws Exception {
Employee emp = new Employee("emp_id","emp_name");//whichever data your entity class have
Mockito.when(employeeService.addEmployee(Mockito.any(Employee.class))).thenReturn(emp);
mockMvc.perform(MockMvcRequestBuilders.post("/employees")
.content(asJsonString(emp))
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentType("application/json;charset=UTF-8"));
}
public static String asJsonString(final Object obj) {
try {
return new ObjectMapper().writeValueAsString(obj);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Dans l'exemple donné ci-dessus, moquez votre classe de service qui est nécessaire pour publier les données dans votre classe d'entité Employé. Je suppose que vous le faites via le contrôleur, vous devez donc d'abord initialiser le contrôleur qui se trouve sous l'annotation @Before.
En faisant l'exemple ci-dessus, vous pourrez publier vos données au format JSON.