คำหลักเป็นโมฆะ
ในส่วนนี้อธิบายวิธีการประกาศและเรียกใช้เมธอด void
ตัวอย่างต่อไปนี้ประกาศวิธีการชื่อ printGrade และเรียกให้พิมพ์เกรดที่กำหนด
ตัวอย่าง
TestVoidMethod คลาสสาธารณะ { โมฆะสาธารณะหลัก (สตริง [] args) { printGrade (78.5); } โมฆะสาธารณะคงที่ printGrade (คะแนนสองเท่า) { ถ้า (คะแนน> = 90.0) { System.out.println ('A'); else if (คะแนน >= 80.0) { System.out.println('B'); } else if (คะแนน >= 70.0) { System.out.println('C'); } else if (คะแนน >= 60.0) { System.out.println('D'); } else { System.out.println('F'); }}
ผลการรวบรวมและการทำงานของตัวอย่างข้างต้นมีดังนี้:
ค
วิธีการ printGrade ที่นี่เป็นวิธีการประเภทโมฆะและจะไม่ส่งกลับค่า
การเรียกเมธอด void จะต้องเป็นคำสั่ง ดังนั้นจึงเรียกว่าเป็นคำสั่งในบรรทัดที่สามของวิธีหลัก เช่นเดียวกับข้อความใดๆ ที่ลงท้ายด้วยเครื่องหมายอัฒภาค
วิธีเดียวในการทดสอบประเภทโมฆะ
ชั้นบริการของ Java จะมีวิธีการประเภทโมฆะมากมาย เช่น บันทึก* และการอัปเดต* วิธีการเหล่านี้จะทำการอัปเดตเพียงบางส่วนเท่านั้น และจะไม่มีค่าที่ส่งคืน การทดสอบเดี่ยวไม่สามารถเขียนตามค่าที่ส่งคืนของวิธีการได้ ใช้วิธีการพิเศษเท่านั้น
สภาพแวดล้อมสำหรับวิธีนี้: Mockito, testng
วิธีการทดสอบ:
วิธี VOID ที่คุณต้องการทดสอบ
@แทนที่ public void updateRuleName(Long ruleId, String newRuleName, Long ucId) { Assert.notNull(ruleId, "The Rule ID never be not be Null"); Assert.notNull(newRuleName, "ชื่อกฎไม่สามารถเป็น Null"); notNull( ucId, "UCID ของผู้ดำเนินการไม่สามารถเป็น Null ได้"); สตริง cleanNewRuleName = StringUtils.trim(newRuleName); if (StringUtils.isBlank(cleanNewRuleName)) { โยน IllegalArgumentException ใหม่ ("ชื่อกฎใหม่ไม่สามารถเว้นว่างได้"); } // กฎวัตถุแบบสอบถาม กฎ = queryRuleById(ruleId); = กฎ) { โยน IllegalDataException ใหม่ ("ไม่พบกฎ"); กฎ.setRuleId(ruleId); กฎ.setRuleName(cleanNewRuleName); กฎ.setUpdateUcid(ucId);
วิธีทดสอบ:
การทดสอบวิธีการส่งคืนเป็นโมฆะ
@ทดสอบโมฆะสาธารณะ testUpdateRuleName() { Long RuleId = 1L; String newRuleName = "newRuleName"; Long ucId = 123L; List<Rule> กฎ = new ArrayList<Rule>(); ((ไบต์) DBValueSetting.RULE_STATUS_TAKE_EFFECT); กฎเพิ่ม (กฎ); กฎการสืบค้น Map<String, Object> params = new HashMap<String, Object>(); params.put("ruleId", ruleId); Mockito.when(ruleDao.queryRulesByCondition(params)).thenReturn(rules); .doAnswer (คำตอบใหม่ <Object>() { คำตอบของวัตถุสาธารณะ (การเรียกใช้ InvocationOnMock) { // เบรกพอยต์ 2: กฎกฎ = (กฎ) invocation.getArguments()[0]; Assert.assertTrue(rule.getRuleName().equals("newRuleName")); ส่งคืน null; } }).when(ruleDao ).updateSelective( Mockito.any(Rule.class)); // เบรกพอยต์ 1: ดำเนินการที่นี่ก่อน lawService.updateRuleName(ruleId, ชื่อกฎใหม่ ucId); }
ดังที่แสดงในความคิดเห็น หากมีการเพิ่มจุดพักสองจุด บรรทัดการเรียกสุดท้ายจะถูกดำเนินการก่อนระหว่างการดำเนินการ ระหว่างการดำเนินการของจุดสิ้นสุด 1 จุดสิ้นสุดของจุดสิ้นสุด 2 จะถูกดำเนินการ ในขณะนี้ สามารถรับได้ที่จุดพัก 2 ไปที่พารามิเตอร์อินพุตของการดำเนินการเมธอดและดำเนินการตรวจสอบยืนยันพารามิเตอร์อินพุตเพื่อให้บรรลุวัตถุประสงค์
new Anwer เป็นอินเทอร์เฟซที่มีเพียงวิธีเดียวเท่านั้น ซึ่งใช้ในการตั้งค่ารายการดำเนินการพร็อกซีสำหรับการเรียกเมธอด
การดำเนินการ doAnswer
คำตอบอินเทอร์เฟซสาธารณะ <T> { /** * @param การร้องขอการร้องขอในการจำลอง }
เมื่อโค้ดถูกดำเนินการไปที่ "ruleDao.updateSelective(rule);" interceptor ที่ถูกเรียกสำหรับอ็อบเจ็กต์จำลองจะถูกทริกเกอร์ ใน interceptor พร็อกซีแบบไดนามิกจะถูกสร้างขึ้น การเรียกใช้พร็อกซีแบบไดนามิกคือวิธีการที่ครอบคลุมใน new คำตอบ;
เมื่อใช้วิธีการสกัดกั้นและพร็อกซี การตั้งค่าและการได้รับพารามิเตอร์อินพุตและเอาท์พุตของวิธีอ็อบเจ็กต์จำลองจะถูกรับรู้ เมื่อใช้วิธีการนี้ จะสามารถยืนยันการเรียกคลาสการดำเนินการภายในวิธี VOID ได้