私は、SpringブートフレームワークでJUnitとMockitoを使用したユニットテストの初心者です。この方法をテストしたい。テスト方法POSTリクエストメソッド:
// add Employee
@RequestMapping(method = RequestMethod.POST)
public void addEmployee(@RequestBody Employee employee){
this.employeeService.addEmployee(employee);
}
前もって感謝します
@ merve-sahinが正しく指摘したように、@ WebMvcTestを使用してこれを実現できます。
次の例を見てください:
@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());
}
}
上記のコードでは、@ MockBeanを使用して依存サービスをモックできます。テストでは、カスタムEmployeeオブジェクトでポストを実行し、応答を検証します
呼び出しを実行しながら、ヘッダー、承認を追加できます
JSONをメディアタイプとして使用すると仮定すると、任意のjsonライブラリを使用してtoJson()メソッドを記述し、EmployeeオブジェクトをJson文字列形式に変換できます。
private String toJson(Employee emp) {
XMLを使用している場合は、XMLでも同じことができます
期待を連鎖的に使用して、応答を検証できます。正しく指摘されているように、MockedMvcリンクをチェックアウトしてください。
次の例をご覧ください。
@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);
}
}
上記の例では、データをEmployeeエンティティクラスにポストするために必要なサービスクラスをモックします。コントローラーを介してこれを行うことを前提としているため、最初に@Beforeアノテーションの下にあるコントローラーを初期化する必要があります。
上記の例を実行することにより、データをJSON形式に投稿できます。