วิธีทดสอบมากกว่า IllegalArgumentException ถูกส่งไปในคอนโทรลเลอร์ RESTful โดยใช้ MockRestServiceServer

ฉันมีตัวควบคุม RESTful ที่เรียบง่ายซึ่งสร้าง json และฉันต้องการทดสอบว่ามันใช้งานได้ดีหรือไม่ ฉันสามารถทดสอบวิธีการได้อย่างง่ายดายเมื่อมีรหัสผู้ใช้อยู่ โดยไม่มีปัญหา ฉันต้องการตรวจสอบว่า IllegalArgumentException ถูกส่งออกไปเมื่อไม่มีรหัสที่ระบุ มีวิธีใดบ้างที่จะทำเช่นนั้น?

ในแอปพลิเคชัน เมื่อเกิดข้อผิดพลาดในการยืนยัน การตอบสนองจะถูกเปลี่ยนเส้นทางไปยังหน้าข้อผิดพลาดทั่วไปที่แสดงข้อความทั่วไป ถ้าฉันใช้ response(withStatus(HttpStatus.NOT_FOUND) ฉันไม่ได้ตรวจสอบข้อยกเว้นหรือข้อความของฉัน ใครช่วยฉันหน่อยได้ไหม

นี่คือวิธีที่ฉันต้องการทดสอบ:

@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);
}

นี่คือการทดสอบที่มีรหัสที่ถูกต้อง:

@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);
}

ขอแสดงความนับถือ ดาเนียลา


person Daniela    schedule 17.11.2014    source แหล่งที่มา


คำตอบ (2)


ทำไมคุณไม่จับข้อยกเว้นและสร้างบันทึกและเขียนข้อยกเว้นลงในบันทึก

person neo    schedule 17.11.2014
comment
ฉันถูกบังคับให้เพิ่มการตอบสนองเมื่อใช้ MockRestServiceServer: mockServer.expect(something).andRespond(something) ฉันไม่สามารถจับข้อยกเว้นได้เพราะฉันจะได้รับชุดการตอบสนองในวิธีการและวิธีการนั้นไม่ยอมรับคลาสข้อยกเว้น... - person Daniela; 17.11.2014

อัปเดตการทดสอบของคุณตามด้านล่าง

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

สังเกตพารามิเตอร์เพิ่มเติม expected ซึ่งระบุข้อยกเว้นซึ่งจะต้องถูกส่งออกไปขณะดำเนินการทดสอบ

นอกจากนี้ เพื่อยืนยันข้อความยกเว้น รหัสข้อผิดพลาด ฯลฯ ให้สร้างตัวจับคู่ข้อยกเว้นแบบกำหนดเอง อ้างอิงคำตอบของฉันสำหรับรายละเอียดและรหัสหลอก

person Bond - Java Bond    schedule 17.11.2014
comment
ปัญหาที่ฉันมีคือฉันไม่รู้ว่าจะต้องใส่อะไรลงในการตอบสนองของเซิร์ฟเวอร์จำลองเพื่อที่จะตอบกลับโดยมีข้อยกเว้น mockServer.expect(requestTo(JSON_URL + USER)).andExpect(method(HttpMethod.GET)) .andRespond(withSuccess(JSON_RESPONSE, MediaType.APPLICATION_JSON)); ฉันไม่สามารถเยาะเย้ยคำขอโดยไม่มีการตอบกลับ และหากแทนที่จะใช้การตอบกลับที่สำเร็จ ฉันใช้การตอบกลับที่ไม่ถูกต้อง หรือมีข้อผิดพลาด ฉันจะได้รับข้อยกเว้นนั้นแทน IllegalArgument - person Daniela; 17.11.2014