web-dev-qa-db-ja.com

MockitoとJUnitを使用してSpringブートでPOSTメソッドをテストする方法

私は、SpringブートフレームワークでJUnitとMockitoを使用したユニットテストの初心者です。この方法をテストしたい。テスト方法POSTリクエストメソッド:

// add Employee
@RequestMapping(method = RequestMethod.POST)
public void addEmployee(@RequestBody Employee employee){
    this.employeeService.addEmployee(employee);
}

前もって感謝します

6
sk555

@ 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​​リンクをチェックアウトしてください。

6
Ashish Mishra

次の例をご覧ください。

@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形式に投稿できます。

0
Ravi Mengar