Cara menguji IllegalArgumentException yang dilemparkan ke pengontrol RESTful menggunakan MockRestServiceServer

Saya memiliki pengontrol RESTful yang sangat sederhana yang menghasilkan json dan saya ingin menguji apakah itu berfungsi dengan baik. Saya dapat dengan mudah menguji metode ini ketika id pengguna ada, tidak ada masalah dengan itu. Saya ingin memvalidasi bahwa IllegalArgumentException dilemparkan ketika id yang diberikan tidak ada. Apakah ada cara untuk melakukan itu?

Dalam aplikasi, ketika terjadi kesalahan pernyataan, respons diarahkan ke halaman kesalahan umum yang menampilkan pesan umum. Jika saya menggunakan respon(withStatus(HttpStatus.NOT_FOUND) Saya tidak memvalidasi pengecualian atau pesan saya. Adakah yang bisa membantu saya?

Ini adalah metode yang ingin saya uji:

@Transactional (readOnly = true)
@RequestMapping(method=RequestMethod.GET, value="/json/user/{id}",  headers="Accept=application/json, text/html")
public @ResponseBody UserData getUserJson(@PathVariable Long id)
{
    User user = this.userService.findUserById(id);
    Assert.notNull(user , "User does not exist with the given id: " + id);
    return new UserData (user);
}

Ini adalah tes dengan id yang valid:

@Test
public void testRestUserJson() {

mockServer.expect(requestTo(JSON_URL + USER)).andExpect(method(HttpMethod.GET))
          .andRespond(withSuccess(JSON_RESPONSE, MediaType.APPLICATION_JSON));


UserData userData = restClientTemplate.getForObject(JSON_URL + USER, UserData.class);
AssertResponseContent(userData , expectedData);

mockServer.verify();
EasyMock.verify(user);
}

Salam, Daniela


person Daniela    schedule 17.11.2014    source sumber


Jawaban (2)


Mengapa Anda tidak menangkap pengecualian dan membuat log dan menulis pengecualian ke log.

person neo    schedule 17.11.2014
comment
Saya terpaksa menambahkan Respons saat menggunakan MockRestServiceServer: mockServer.expect(something).andRespond(something). Saya tidak bisa begitu saja menangkap pengecualian karena saya akan menerima respons yang ditetapkan dalam metode dan metode tersebut tidak menerima kelas pengecualian... - person Daniela; 17.11.2014

Perbarui pengujian Anda seperti di bawah ini.

@Test(expected = IllegalArgumentException.class)
public void testRestUserJson() { ... }

Perhatikan parameter tambahan expected yang menentukan Pengecualian yang harus dilempar saat eksekusi pengujian.

Selain itu untuk menegaskan pesan pengecualian, kode kesalahan, dll. buat pencocokan pengecualian khusus. Lihat jawaban saya untuk detail dan kode semu.

person Bond - Java Bond    schedule 17.11.2014
comment
Masalah yang saya alami adalah saya tidak tahu apa yang harus dimasukkan ke dalam respons server tiruan untuk merespons dengan pengecualian. mockServer.expect(requestTo(JSON_URL + USER)).andExpect(metode(HttpMethod.GET)) .andRespond(withSuccess(JSON_RESPONSE, MediaType.APPLICATION_JSON)); Saya tidak dapat meniru permintaan tanpa respons dan jika alih-alih menggunakan respons yang berhasil, saya menggunakan respons yang tidak valid, atau kesalahan, saya akan mendapatkan pengecualian itu, bukan yang IllegalArgument. - person Daniela; 17.11.2014