NUnit กับ xUnit


121

อะไรคือความแตกต่างระหว่างNUnitและxUnit.net ? อะไรคือจุดสำคัญของการพัฒนาพวกเขาสองคนไม่ใช่แค่เรื่องเดียว?

ฉันได้อ่านมาว่า xUnit กำลังพัฒนาโดยผู้คิดค้น NUnit:

xUnit.net เป็นเครื่องมือทดสอบหน่วยสำหรับ. NET Framework เขียนโดย ผู้ประดิษฐ์ดั้งเดิมของ NUnit

ในทางกลับกัน:

NUnit เป็นเฟรมเวิร์กการทดสอบหน่วยสำหรับภาษา. Net ทั้งหมด .. รุ่นที่ใช้งานจริงเวอร์ชันปัจจุบัน 2.6 เป็นรุ่นหลักลำดับที่ 7 ของเครื่องมือทดสอบหน่วยที่ใช้ xUnitนี้

แล้วความจริงอยู่ที่ไหน?


4
ดังที่ @Joey ได้ชี้ให้เห็น - นี่ไม่ใช่คำถามที่เชื่อมโยงกันโดยตรง ในกรณีนี้ OP มีบางอย่างที่เข้าใจผิดโดยพื้นฐาน คือความแตกต่างระหว่าง xUnit.net - เครื่องมือทดสอบหน่วยและxหน่วย - คำทั่วไปสำหรับคลาสของกรอบการทดสอบหน่วย (nUnit, jUnit ฯลฯ ) การลงคะแนนเพื่อเปิดใหม่
Rob Levine

คำตอบ:


148

ในขณะที่เขียนคำตอบนี้ NUnit เวอร์ชันล่าสุดคือ v3.5 และ xUnit.net คือ v2.1

ทั้งสองเฟรมเวิร์กนั้นยอดเยี่ยมและทั้งคู่รองรับการทดสอบแบบขนาน (ในทางที่แตกต่างกัน) NUnitมีมาตั้งแต่ปี 2545 มีการใช้กันอย่างแพร่หลายมีการจัดทำเอกสารอย่างดีและมีชุมชนขนาดใหญ่ในขณะที่xUnit.netมีความทันสมัยมากขึ้นมีการยึดติดกับ TDD มากขึ้นสามารถขยายได้มากขึ้นและมีแนวโน้มในการพัฒนา. NET Core นอกจากนี้ยังมีการบันทึกไว้เป็นอย่างดี

นอกจากนั้นความแตกต่างหลักที่ฉันสังเกตเห็นคือวิธีที่ xUnit.net เรียกใช้วิธีการทดสอบ ดังนั้นในNUnitเราจึงมีคลาสทดสอบและชุดวิธีการทดสอบอยู่ในนั้น NUnit สร้างอินสแตนซ์ใหม่ของคลาสทดสอบจากนั้นรันวิธีการทดสอบทั้งหมดจากอินสแตนซ์เดียวกัน ในขณะที่xUnit.net สร้างอินสแตนซ์ใหม่ของคลาสทดสอบสำหรับวิธีการทดสอบแต่ละวิธี . ดังนั้นเราไม่สามารถใช้ฟิลด์หรือคุณสมบัติเพื่อแบ่งปันข้อมูลระหว่างวิธีการทดสอบซึ่งเป็นการปฏิบัติที่ไม่ดีเนื่องจากวิธีการทดสอบของเราจะขึ้นอยู่กันซึ่งไม่สามารถยอมรับได้ใน TDD ดังนั้นหากคุณใช้ xunit.net คุณสามารถมั่นใจได้ว่าวิธีการทดสอบของคุณแยกออกจากกันโดยสิ้นเชิง

หากคุณยินดีที่จะแบ่งปันข้อมูลระหว่างวิธีการทดสอบของคุณ xUnit จะให้คุณทำเช่นนั้น ดังนั้นโดยค่าเริ่มต้นวิธีการทดสอบทั้งหมดจะถูกแยกออกโดยสิ้นเชิง แต่คุณสามารถแยกการแยกนี้ได้ในบางกรณีโดยเจตนา ฉันชอบทัศนคติแบบนี้นั่นคือเหตุผลที่ฉันชอบมันมากกว่า


5
สำหรับรายละเอียดเพิ่มเติมตรวจสอบโพสต์ล่าสุดของฉัน: codopia.wordpress.com/2017/02/20/…
akazemis

2
สิ่งที่คุณเขียนเกี่ยวกับการดำเนินการแบบขนานนั้นไม่เป็นความจริง อาจจะเป็นตอนที่คุณโพสต์ แต่ตอนนี้ไม่ใช่แล้ว ตรวจสอบเรื่องนี้xunit.net/docs/running-tests-in-parallel มันบอกว่าวิธีทดสอบในคลาสเดียวจะไม่ทำงานคู่ขนานกัน
Gondil

ขอบคุณ @Gondil คุณพูดถูกมันจะไม่เรียกใช้เมธอดของคลาสเดียวแบบขนาน
บิด

2
ฉันไม่แน่ใจว่าคุณรู้ได้อย่างไรว่า xUnit นั้น "ได้รับการบันทึกอย่างดี" อย่างที่เห็นได้ชัด ข้อมูลทั้งหมดจะต้องพบผ่านแหล่งชุมชนและคำถาม stackoverflow แทนที่จะเป็นเอกสารที่ดีเหมือนที่ NUnit ทำ ฉันรู้สึกตื่นเต้นอย่างมากเกี่ยวกับ xUnit หลังจากคำตอบของคุณ แต่คิดว่า NUnit ดูเหมือนจะทำงานได้ดีใน. NET Core เช่นกัน
CularBytes

1
@Loaderon ฉันโพสต์ไว้ประมาณ 4 ปีที่แล้วและฉันใช้ xunit มาตั้งแต่นั้นมาจนถึงตอนนี้ เอกสารและชุมชนดีขึ้นกว่าเมื่อก่อนและเป็นผู้ใหญ่มากขึ้นในขณะนี้ ดังนั้นใช้ XUnit อย่างสบายใจคุณไม่จำเป็นต้องถอยกลับไปที่ NUnit :)
akazemis

33

คุณกำลังสับสนชื่อของเครื่องมือเดียว ( xUnit.net ) กับชื่อของทั้งคลาสของเฟรมเวิร์กการทดสอบหน่วย ( xUnit , xหมายถึงภาษา / สภาพแวดล้อมเช่น JUnit, NUnit, ... )


2
น่าเสียดายที่สิ่งนี้ถูกปิดเนื่องจากมันไม่ได้ซ้ำกัน - คุณพูดถูก - OP สับสนระหว่างสองคำที่เกือบจะเหมือนกัน
Rob Levine

ฉันเปลี่ยนชื่อเรื่องเล็กน้อยเพื่อให้แน่ใจว่าจะไม่มีความสับสน
Ruslan

1
ฉันไม่ได้ใช้ชื่อ แต่เป็นส่วนที่ไฮไลต์ของเครื่องหมายคำพูดในคำถามของคุณ แต่บางทีฉันอาจเข้าใจคุณผิด
Joey

9

xUnit จุดเด่น:

xUnit เป็นไปตามแนวคิดใหม่โดยหลีกเลี่ยงวิธี "SetUp" และ "TearDown" แบบเก่า มันบังคับให้เราใช้ IDisposable และตัวสร้างตามที่เราควรทำในฐานะนักพัฒนา. NET xUnit ยังมีแนวคิดการแบ่งปันบริบทที่ชัดเจน

xUnit จุดด้อย:

ความพร้อมในการรับบริบทการทดสอบยังไม่ได้ใช้งาน


1
คืออะไร"บริบทการทดสอบ" ? ตอนนี้ได้ดำเนินการแล้วหรือยัง?
Peter Mortensen

บริบทการทดสอบจะให้ข้อมูลเกี่ยวกับการทดสอบปัจจุบัน (เช่นชื่อการทดสอบ) จากสิ่งที่ฉันทราบว่าอาจจะยังไม่ได้ใช้ :(.
Shoter

8

ประโยชน์อย่างหนึ่งของ xUnit คือพบการทดสอบในชั้นเรียนต่างๆ มันจะทำงานพวกเขาในแบบคู่ขนาน วิธีนี้ช่วยประหยัดเวลาได้มากหากคุณมีกรณีทดสอบหลายกรณี

แน่นอนคุณสามารถปิดสิ่งนี้หรือควบคุมการทำงานของมันได้ (จำนวนเธรดเธรดต่อคลาสการทดสอบต่อแอสเซมบลี ฯลฯ

ตรวจสอบนี้สารละลายตัวอย่างที่มีสองโครงการทดสอบโดยใช้ xUnit อื่น ๆ NUnit

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการทดสอบคู่ขนานใน xUnit ที่นี่


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