ความแตกต่างระหว่าง 2 JUnit Assert


257

เฟรมเวิร์ก JUnit มี 2 Assertคลาส (ในแพ็กเกจที่แตกต่างกันอย่างเห็นได้ชัด) และวิธีการในแต่ละรายการดูเหมือนจะคล้ายกัน มีใครอธิบายได้ไหมว่าเพราะเหตุใด

เรียนผมหมายถึงคือ: และjunit.framework.Assertorg.junit.Assert


8
ใน Intellij IDEA คุณสามารถแยกjunit.framework.*ออกจากรายการแบบหล่นการนำเข้าแบบคงที่Editor->General->Auto Import->Exclude from Import and Completionได้
jordanpg

คำตอบ:


239

วิธีการเดิม (จาก JUnit 3) junit.framework.TestCaseคือการทำเครื่องหมายการทดสอบโดยการขยายชั้นเรียน สิ่งนั้นสืบทอดมาjunit.framework.Assertและคลาสการทดสอบของคุณได้รับความสามารถในการเรียกเมธอด assert ด้วยวิธีนี้

ตั้งแต่เวอร์ชัน 4 ของ JUnit เฟรมเวิร์กใช้Annotationsสำหรับทำเครื่องหมายการทดสอบ TestCaseดังนั้นคุณจึงไม่จำเป็นอีกต่อไปที่จะขยาย แต่นั่นหมายความว่าวิธีการยืนยันไม่พร้อมใช้งาน แต่คุณสามารถนำเข้าคงที่ของAssertคลาสใหม่ นั่นเป็นเหตุผลที่วิธีการยืนยันทั้งหมดในคลาสใหม่เป็นวิธีการคงที่ ดังนั้นคุณสามารถนำเข้าด้วยวิธีนี้:

import static org.junit.Assert.*;

หลังจากการนำเข้าแบบคงที่นี้คุณสามารถใช้วิธีนี้โดยไม่มีคำนำหน้า

ที่การออกแบบใหม่พวกเขาย้ายไปยังแพ็คเกจใหม่org.junitที่ตามอนุสัญญาปกติสำหรับการตั้งชื่อแพ็กเกจ


6
คำตอบนี้ไม่ถูกต้องทั้งหมดคุณสามารถนำเข้าวิธีการคงที่ในชั้นเรียน junit.framework.Assert และ org.junit.Assert อย่างไรก็ตามอาจเป็นความคิดที่ดีที่จะยึดติดกับคลาส org.junit.Assert เนื่องจากเป็นรุ่นใหม่เขียนใหม่เล็กน้อยและอาจมีความหมายแทน
Glenn Bech

75

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

ชอบคนที่ใหม่ที่สุดโดยเฉพาะอย่างยิ่งเมื่อใช้งาน JDK5 ขึ้นไปด้วยการสนับสนุนการเพิ่มความคิดเห็น


19

ในความเป็นจริงมีการเปลี่ยนแปลงการทำงาน: org.junit.Assertจะบ่นถ้าคุณใช้สองข้อโต้แย้งassertEquals()ด้วยfloatหรือdoubleในขณะที่junit.framework.Assertจะปิดอัตโนมัติมันเงียบ


5

ฉันเชื่อว่าพวกเขากำลังปรับโครงสร้างใหม่จากjunit.frameworkเป็นorg.junitและได้junit.framework.Assertรับการดูแลเพื่อความเข้ากันได้ย้อนหลัง


3

ฉันเปรียบเทียบซอร์สโค้ดคร่าวๆและไม่มีการเปลี่ยนแปลงที่ร้ายแรง มีการเพิ่มความคิดเห็นจำนวนมากorg.junit.Assertและมีการรีแฟคเตอร์บางอย่าง Arraysการเปลี่ยนแปลงเพียงอย่างเดียวคือการเปรียบเทียบกับ มีบางสะสางโค้ดที่มี แต่มี imho () ไม่มีการเปลี่ยนแปลงการทำงาน


1
ฉันเชื่อว่า @David Moles นั้นถูกต้องและนี่จะเป็นการเปลี่ยนแปลงการทำงาน
orbfish

1

ใน Android Studio (และใน IntelliJ ด้วย) คุณสามารถยกเว้นทั่วโลกjunit.frameworkจากข้อเสนอการนำเข้าอัตโนมัติ

คุณสามารถกำหนดขอบเขตระหว่างหรือIDE Projectหากคุณไม่มีโครงการที่ใช้ JUnit 3 คุณสามารถอยู่กับขอบเขต IDE ได้อย่างปลอดภัย

ตำแหน่งการตั้งค่า:

การตั้งค่า -> ตัวแก้ไข -> ทั่วไป -> การนำเข้าอัตโนมัติ

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.