คำนำ
เมื่อเราเรียนรู้ Java ครูหรือหนังสือทั่วไปเขียนว่ามี Java ขั้นพื้นฐานแปดประเภท พวกเขาคือ: ไบต์, int, สั้น, ยาว, ลอย, สอง, ถ่าน, บูลีน อย่างไรก็ตามเมื่อฉันอ่านพระคัมภีร์ Java "คิดใน Java" เมื่อเช้านี้ฉันพบว่าผู้เขียนใส่โมฆะเมื่ออธิบายประเภทข้อมูล มีเก้าชนิดนี้ ฉันอ่าน Baidu และพบว่าหนังสือบางเล่มยังเขียน Java พื้นฐานเก้าประเภท
มีวิธีการที่เป็นโมฆะมากมายในเลเยอร์บริการ Java เช่นบันทึก* และอัปเดต* วิธีการเหล่านี้เพิ่งได้รับการอัปเดตและจะไม่มีค่าส่งคืน การทดสอบครั้งเดียวไม่สามารถเขียนได้ตามค่าการส่งคืนของวิธีการดังนั้นพวกเขาจึงสามารถใช้วิธีการพิเศษเท่านั้น
สภาพแวดล้อมของวิธีนี้: mockito, testng
วิธีการทดสอบ:
ชวา
@Override โมฆะสาธารณะ updaterulename (Long Ruleid, String newRulename, uCID ยาว) {assert.notNull (Ruleid, "รหัสกฎไม่สามารถเป็นโมฆะ"); assert.notnull (newrulename, "ชื่อกฎไม่สามารถเป็นโมฆะ"); assert.notnull (ucid, "UCID ของผู้ประกอบการไม่สามารถเป็นโมฆะ"); String CleanNewRulename = StringUtils.Trim (newRulename); if (stringutils.isblank (CleanNewrulename)) {โยน unlegalargumentException ใหม่ ("ชื่อกฎใหม่ไม่สามารถว่างเปล่าได้"); } // การสอบถามกฎกฎวัตถุกฎกฎ = queryRuleById (RuleID); if (null == กฎ) {โยน unlegraldataexception ใหม่ ("ไม่พบกฎ"); } Rule.setRuleId (Ruleid); Rule.setRulename (CleanNewrulename); Rule.setUpdateucid (UCID); Rule.SetUpDatetime (วันที่ใหม่ ()); Ruledao.updateselective (กฎ); -วิธีทดสอบ:
ทดสอบ Java โดยวิธีการส่งคืนโมฆะ
@Test โมฆะสาธารณะ TestUpDaterUlename () {Long Ruleid = 1L; สตริง newRulename = "newRulename"; ucid ยาว = 123L; รายการ <Rule> กฎ = ใหม่ ArrayList <Rule> (); กฎกฎ = กฎใหม่ (); Rule.setRulestatus ((ไบต์) dbValuesetting.rule_status_take_effect); กฎ ADD (กฎ); // สอบถามแผนที่วัตถุกฎ <สตริงวัตถุ> params = new hashmap <string, object> (); params.put ("ruleid", ruleid); Mockito.when (Ruledao.QueryRulesByCondition (params)). THENRETURN (กฎ); mockito.doanswer (คำตอบใหม่ <jobch> () {คำตอบวัตถุสาธารณะ (InvocationOnmock Invocation) {// breakpoint 2: กฎกฎ = (กฎ) การเรียกใช้งาน. getArguments () [0]; assert.assertTrue (regu.getRulename () }). เมื่อ (RULEDAO) .UPDATESElective (mockito.any (regu.class)); // breakpoint 1: ดำเนินการที่นี่ Ruleservice.updaterulename (Ruleid, newrulename, ucid); -ดังที่แสดงในความคิดเห็นหากมีการเพิ่มจุดพักสองจุดสายเรียกสุดท้ายจะถูกดำเนินการก่อนในระหว่างกระบวนการดำเนินการ ในระหว่างการดำเนินการของจุดสิ้นสุด 1 ต้นขั้วของจุดสิ้นสุด 2 จะถูกดำเนินการ ในเวลานี้พารามิเตอร์การดำเนินการตามวิธีการสามารถรับได้ที่ BreakPoint 2 และพารามิเตอร์ขาเข้าสามารถดำเนินการตรวจสอบการตรวจสอบเพื่อให้บรรลุวัตถุประสงค์
คำตอบใหม่คืออินเทอร์เฟซซึ่งมีเพียงวิธีเดียวเท่านั้นซึ่งใช้ในการตั้งค่าพอร์ทัลการดำเนินการพร็อกซีสำหรับการโทรวิธี
การใช้งาน doanswer java
คำตอบอินเตอร์เฟสสาธารณะ <t> { /*** @param เรียกร้องให้มีการร้องขอในการเยาะเย้ย * * @return ค่าที่จะส่งคืน * * @throws throwable throwable to thrown */ t คำตอบ (InvocationOnmock Invocation) throws throwable;} เมื่อรหัสถูกดำเนินการกับ " ruleDao.updateSelective(rule); ", interceptor ที่เรียกว่าวัตถุจำลองจะถูกเรียกใช้ ในการสกัดกั้นจะมีการสร้างพร็อกซีแบบไดนามิก การเรียกของพร็อกซีแบบไดนามิกเป็นวิธีที่ครอบคลุมในคำตอบใหม่
การใช้สองวิธี: การสกัดกั้นและพร็อกซีการตั้งค่าและการได้รับพารามิเตอร์ขาเข้าและขาออกของวิธีการจำลองวัตถุได้รับการรับรู้ ด้วยวิธีนี้คลาสการดำเนินการเรียกภายในวิธีโมฆะสามารถตรวจสอบได้
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะช่วยในการศึกษาหรือทำงานของคุณ หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร