ใน SpringMVC กรณีทดสอบทั่วไปกำลังทดสอบเลเยอร์บริการ วันนี้ฉันจะสาธิตวิธีการใช้ MOCK SpringMVC เพื่อทดสอบรหัสเลเยอร์คอนโทรลเลอร์โดยตรง
1. การทดสอบจำลองคืออะไร?
การทดสอบแบบจำลองเป็นวิธีการทดสอบที่ใช้วัตถุเสมือนจริงเพื่อสร้างสำหรับการทดสอบสำหรับวัตถุบางอย่างที่ไม่ง่ายต่อการสร้างหรือรับในระหว่างกระบวนการทดสอบ
2. ทำไมต้องใช้การทดสอบจำลอง?
การทดสอบกับวัตถุจำลองส่วนใหญ่ใช้เพื่อจำลองเครื่องมือที่ไม่ง่ายต่อการสร้างในแอปพลิเคชัน (เช่น HttpservletRequest จะต้องสร้างในภาชนะ Servlet) หรือวัตถุที่ค่อนข้างซับซ้อน (เช่นวัตถุผลลัพธ์ใน JDBC) เพื่อให้การทดสอบราบรื่น
3. คำอธิบายประกอบทั่วไป
runwith (springjunit4classrunner.class): หมายถึงการใช้ส่วนประกอบการทดสอบสปริงสำหรับการทดสอบหน่วย;
WebAppConfiguration: การใช้คำอธิบายประกอบนี้จะเปิดใช้งานบริการเว็บเมื่อเรียกใช้การทดสอบหน่วยจากนั้นเริ่มเรียก REST API ของคอนโทรลเลอร์แล้วหยุดบริการเว็บหลังจากการทดสอบหน่วยเสร็จสมบูรณ์
บริบทการกำหนดค่า: มีหลายวิธีในการระบุข้อมูลไฟล์การกำหนดค่าของถั่ว ตัวอย่างนี้ใช้แบบฟอร์มพา ธ ไฟล์ หากมีไฟล์การกำหนดค่าหลายไฟล์ข้อมูลในวงเล็บสามารถกำหนดค่าเป็นอาร์เรย์สตริงเพื่อแสดงได้
4. ติดตั้งสภาพแวดล้อมการทดสอบ
กรอบการทดสอบ Spring MVC มีสองวิธี: การติดตั้งและรวมการทดสอบสภาพแวดล้อมเว็บอย่างอิสระ (วิธีนี้ไม่ได้รวมสภาพแวดล้อมเว็บจริง แต่จำลองและทดสอบผ่าน API จำลองที่สอดคล้องกันโดยไม่ต้องเริ่มต้นเซิร์ฟเวอร์)
วิธีทดสอบการติดตั้งอิสระ
Mockmvcbuilders.standalonesetup (วัตถุ ... คอนโทรลเลอร์): ระบุชุดของตัวควบคุมผ่านพารามิเตอร์เพื่อที่คุณจะได้ไม่จำเป็นต้องได้รับจากบริบท
มีสองขั้นตอนหลัก:
(1) ก่อนอื่นสร้างคอนโทรลเลอร์ที่เกี่ยวข้องด้วยตัวคุณเองและฉีดการพึ่งพาที่เกี่ยวข้อง
(2) จำลองสภาพแวดล้อมการทดสอบ MVC ผ่าน mockmvcbuilders.standalonesetup และรับ mockMVC ผ่านการสร้าง
รหัสมีดังนี้:
แพ็คเกจ com.xfs.test; นำเข้า org.junit.assert; นำเข้า org.junit.before; นำเข้า org.junit.test; นำเข้า org.springframework.test.web.servlet.mockmvc; นำเข้า org.springframework.test. org.springframework.test.web.servlet.result.mockmvcresulthandlers; นำเข้า org.springframework.test.web.servlet.result.mockmvcresultmatchers; นำเข้า org.springframework.test. com.alibaba.fastjson.json; นำเข้า com.alibaba.fastjson.jsonObject; นำเข้า com.xfs.web.controller.apicontroller;/** * วิธีทดสอบการติดตั้งอิสระ SpringMvc การทดสอบ Mock * * @Author Admin * * 10:39:49 am วันที่ 23 พฤศจิกายน @Before การตั้งค่าโมฆะสาธารณะ () {apicontroller apicontroller = ใหม่ apicontroller (); mockMvc = mockMvcBuilders.standalonesetup (apicontroller) .build (); } @Test Public Void TestGetSequence () {ลอง {MVCRESULT MVCRESULT = MOCKMVC.PERFORM (MOCKMVCREQUESTBUILDERS.POST ("/API/getSequence") .andExpect .andreturn (); สถานะ int = mvCresult.getResponse (). getStatus (); System.out.println ("รหัสสถานะคำขอ:" + สถานะ); String result = mvCresult.getResponse (). getContentAsstring (); System.out.println ("อินเตอร์เฟสส่งคืนผลลัพธ์:" + ผลลัพธ์); jsonObject resultObj = json.parseObject (ผลลัพธ์); // ตรวจสอบว่าฟิลด์ความสำเร็จในอินเตอร์เฟสกลับไปที่ JSON นั้นเป็นจริง assert.assertTrue (resultObj.getBooleanValue ("ความสำเร็จ")); } catch (exception e) {e.printstacktrace (); -ผลการร้องขอมีดังนี้:
สภาพแวดล้อมเว็บแบบบูรณาการ
MockMvCBuilders.WebAppContextSetup (บริบท WebApplicationContext): ระบุ webApplicationContext และคอนโทรลเลอร์ที่เกี่ยวข้องจะได้รับจากบริบทและจะได้รับ mockMVC ที่สอดคล้องกัน;
มีสามขั้นตอนหลัก:
(1) @WebAppConfiguration: ใช้ในสภาพแวดล้อมการทดสอบซึ่งหมายความว่า ApplicationContext ที่ใช้ในสภาพแวดล้อมการทดสอบจะเป็นประเภท WebApplicationContext; ค่าระบุรูทของเว็บแอปพลิเคชัน
(2) ผ่าน @AutoWired WebApplicationContext WAC: ApplicationContext คอนเทนเนอร์ที่ถูกฉีดเข้าไปในสภาพแวดล้อมเว็บ
(3) จากนั้นสร้าง mockmvc ผ่าน mockmvcbuilders.webappcontextsetup (WAC) .build () สำหรับการทดสอบ
รหัสมีดังนี้:
แพ็คเกจ com.xfs.test; นำเข้า org.junit.assert; นำเข้า org.junit.before; นำเข้า org.junit.test; นำเข้า org.junit.runner.runwith; นำเข้า org.springframework.beans.factory.annotation.autowired; org.springframework.test.context.contextconfiguration; นำเข้า org.springframework.test.context.junit4.abstractjunit4springcontexts; นำเข้า org.springframework.test.context.web.web.web.web.web.web.web.web.web.web.web org.springframework.test.web.servlet.mockmvc; นำเข้า org.springframework.test.web.servlet.request.mockmvcrequestbuilders; นำเข้า org.springframework.test.web.servlet.servlet. org.springframework.test.web.servlet.result.mockmvcresultmatchers; นำเข้า org.springframework.test.web.servlet.setup.mockmvcbuilders; นำเข้า org.springframework.web. com.alibaba.fastjson.jsonObject;/** * วิธีการสภาพแวดล้อมเว็บแบบบูรณาการการทดสอบการเยาะเย้ย mock * * @author ผู้ดูแลระบบ * * 23 พฤศจิกายน 2017 เวลา 11:12:43 น AbstractJunit4SpringContextTests {@AutoWired WebApplicationContext WAC; mockMVC สาธารณะ mockMVC; เซสชั่น mockhttpsession สาธารณะ; @Before โมฆะสาธารณะก่อน () พ่นข้อยกเว้น {mockmvc = mockmvcbuilders.webappcontextsetup (WAC) .build (); } @Test Public Void TestGetSequence () {ลอง {MVCRESULT MVCRESULT = MOCKMVC.PERFORM (MOCKMVCREQUESTBUILDERS.POST ("/API/getSequence") .andExpect .andreturn (); สถานะ int = mvCresult.getResponse (). getStatus (); System.out.println ("รหัสสถานะคำขอ:" + สถานะ); String result = mvCresult.getResponse (). getContentAsstring (); System.out.println ("อินเตอร์เฟสส่งคืนผลลัพธ์:" + ผลลัพธ์); jsonObject resultObj = json.parseObject (ผลลัพธ์); // ตรวจสอบว่าฟิลด์ความสำเร็จในอินเตอร์เฟสส่งคืน JSON เป็นจริง assert.assertTrue (resultobj.getBooleanValue ("ความสำเร็จ")); } catch (exception e) {e.printstacktrace (); -ผลลัพธ์ของการรันนั้นเหมือนกับการทดสอบอิสระข้างต้น
สรุป:
กระบวนการทั้งหมด:
1. mockmvc.perform ดำเนินการคำขอ;
2. mockmvcrequestbuilders.get ("/ผู้ใช้/1") สร้างคำขอ
3. ผลการตรวจสอบเพิ่มการยืนยันหลังจากดำเนินการ
4. ผลลัพธ์และการเพิ่มโปรเซสเซอร์ผลลัพธ์เพื่อระบุว่าจะทำอย่างไรกับผลลัพธ์ ตัวอย่างเช่นใช้ mockmvcresulthandlers.print () เพื่อส่งออกข้อมูลผลลัพธ์การตอบสนองทั้งหมด
5. ผลลัพธ์และการกลับมาหมายความว่าผลลัพธ์ที่สอดคล้องกันจะถูกส่งคืนหลังจากการดำเนินการเสร็จสมบูรณ์
กระบวนการทดสอบทั้งหมดเป็นเรื่องปกติมาก:
1. เตรียมพร้อมสำหรับสภาพแวดล้อมการทดสอบ
2. ดำเนินการตามคำขอผ่าน MockMVC
3. เพิ่มการยืนยันการยืนยัน
4. เพิ่มโปรเซสเซอร์ผลลัพธ์
5. รับ mvcresult สำหรับการยืนยันที่กำหนดเอง/ทำคำขออะซิงโครนัสถัดไป
6. ถอนการติดตั้งสภาพแวดล้อมการทดสอบ
การอ้างอิง: Spring-MVC-test-framework
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น