คำถามติดแท็ก unit-testing

การทดสอบหน่วยเป็นวิธีการที่แต่ละหน่วยของรหัสที่มาจะถูกทดสอบเพื่อตรวจสอบว่าพวกเขาจะเหมาะสำหรับการใช้งาน


11
เรียกใช้วิธีการทดสอบเดียวด้วย maven
ฉันรู้ว่าคุณสามารถทำการทดสอบทั้งหมดในระดับหนึ่งโดยใช้: mvn test -Dtest=classname แต่ฉันต้องการเรียกใช้แต่ละวิธีและ -Dtest = classname.methodname ดูเหมือนจะไม่ทำงาน

18
การทดสอบหน่วย Python จะไปที่ไหน
หากคุณกำลังเขียนไลบรารีหรือแอพไฟล์ทดสอบหน่วยจะไปไหน เป็นเรื่องที่ดีที่จะแยกไฟล์ทดสอบออกจากรหัสแอปหลัก แต่มันค่อนข้างแปลกที่จะใส่ไว้ในไดเรกทอรีย่อย "การทดสอบ" ภายในไดเรกทอรีรากของแอปเพราะมันทำให้การนำเข้าโมดูลที่คุณจะทำการทดสอบได้ยากขึ้น มีวิธีปฏิบัติที่ดีที่สุดที่นี่?

30
คุณจะทดสอบวิธีการส่วนตัวได้อย่างไร
ฉันกำลังสร้างห้องสมุดชั้นเรียนที่จะมีวิธีการของรัฐและเอกชน ฉันต้องการที่จะทดสอบหน่วยวิธีการส่วนตัว (ส่วนใหญ่ในขณะที่การพัฒนา แต่ยังเป็นประโยชน์สำหรับการปรับโครงสร้างในอนาคต) วิธีที่ถูกต้องในการทำเช่นนี้คืออะไร?

6
ตัวดัดแปลงการเข้าถึง C #“ ภายใน” เมื่อทำการทดสอบหน่วย
ฉันใหม่ในการทดสอบหน่วยและฉันพยายามหาว่าควรเริ่มใช้ตัวปรับการเข้าถึง 'ภายใน' ให้มากขึ้นหรือไม่ ฉันรู้ว่าถ้าเราใช้ 'ภายใน' และตั้งค่าแอสเซมบลีตัวแปร 'InternalsVisibleTo' เราสามารถทดสอบฟังก์ชันที่เราไม่ต้องการประกาศสาธารณะจากโครงการทดสอบ ทำให้ฉันคิดว่าฉันควรใช้ 'ภายใน' เสมอเพราะอย่างน้อยแต่ละโครงการ (ควร?) มีโครงการทดสอบของตัวเอง พวกคุณช่วยบอกเหตุผลได้ไหมว่าทำไมฉันถึงไม่ควรทำอย่างนี้? เมื่อใดที่ฉันควรใช้ 'ส่วนตัว'
469 c#  .net  unit-testing  tdd 


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

6
Mockito สามารถจับข้อโต้แย้งของวิธีที่เรียกหลาย ๆ ครั้งได้หรือไม่?
ฉันมีวิธีที่ได้รับการเรียกสองครั้งและฉันต้องการจับอาร์กิวเมนต์ของการเรียกใช้เมธอดที่สอง นี่คือสิ่งที่ฉันได้ลอง: ArgumentCaptor<Foo> firstFooCaptor = ArgumentCaptor.forClass(Foo.class); ArgumentCaptor<Foo> secondFooCaptor = ArgumentCaptor.forClass(Foo.class); verify(mockBar).doSomething(firstFooCaptor.capture()); verify(mockBar).doSomething(secondFooCaptor.capture()); // then do some assertions on secondFooCaptor.getValue() แต่ฉันได้รับTooManyActualInvocationsข้อยกเว้นเนื่องจาก Mockito คิดว่าdoSomethingควรเรียกเพียงครั้งเดียว ฉันจะตรวจสอบข้อโต้แย้งของการโทรครั้งที่สองได้doSomethingอย่างไร?

18
วิธีรันเมธอดการทดสอบตามลำดับเฉพาะใน JUnit4
ฉันต้องการที่จะดำเนินการวิธีการทดสอบที่มีคำอธิบายประกอบตาม@Testลำดับที่เฉพาะเจาะจง ตัวอย่างเช่น: public class MyTest { @Test public void test1(){} @Test public void test2(){} } ฉันต้องการที่จะให้แน่ใจว่าจะเรียกใช้test1()ก่อนtest2()ทุกครั้งที่ผมทำงานแต่ฉันไม่สามารถหาคำอธิบายประกอบเช่นMyTest@Test(order=xx) ฉันคิดว่ามันเป็นคุณสมบัติที่สำคัญมากสำหรับ JUnit หากผู้เขียน JUnit ไม่ต้องการคุณลักษณะการสั่งซื้อทำไม?


7
NUnit vs. MbUnit กับ MSTest vs. xUnit.net [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา มีกรอบ unittesting ค่อนข้างมากสำหรับ NET. ฉันพบการเปรียบเทียบคุณสมบัติเล็กน้อยนี้: http://xunit.github.io/docs/comparisons.html ตอนนี้ฉันจะเลือกสิ่งที่ดีที่สุดสำหรับเรา แต่อย่างไร มันสำคัญไหม อันไหนเป็นข้อพิสูจน์ในอนาคตมากที่สุดและมีแรงผลักดันที่ดีอยู่ข้างหลัง? ฉันควรสนใจเกี่ยวกับคุณสมบัติหรือไม่ ในขณะที่ xUnit ดูเหมือนจะทันสมัยที่สุดและออกแบบมาโดยเฉพาะสำหรับ. NET แต่ NUnit ก็ดูเหมือนจะเป็นที่ยอมรับอย่างกว้างขวาง MSTest ถูกรวมเข้ากับ Visual Studio อีกครั้ง ...

10
Python unittest ตรงข้ามกับ assertRaises
ฉันต้องการเขียนการทดสอบเพื่อพิสูจน์ว่าข้อยกเว้นไม่ได้เกิดขึ้นในสถานการณ์ที่กำหนด มันตรงไปตรงมาทดสอบว่ายกเว้นถูกยก ... sInvalidPath=AlwaysSuppliesAnInvalidPath() self.assertRaises(PathIsNotAValidOne, MyObject, sInvalidPath) ... แต่คุณจะทำสิ่งตรงกันข้ามได้อย่างไร อย่างนี้ฉันคือสิ่งที่ฉันหลังจาก ... sValidPath=AlwaysSuppliesAValidPath() self.assertNotRaises(PathIsNotAValidOne, MyObject, sValidPath)

11
การจำลองวิธีแบบคงที่ด้วย Mockito
ฉันได้เขียนโรงงานเพื่อผลิตjava.sql.Connectionสิ่งของ: public class MySQLDatabaseConnectionFactory implements DatabaseConnectionFactory { @Override public Connection getConnection() { try { return DriverManager.getConnection(...); } catch (SQLException e) { throw new RuntimeException(e); } } } ฉันต้องการตรวจสอบความถูกต้องของพารามิเตอร์ที่ส่งไปยังDriverManager.getConnectionแต่ฉันไม่ทราบวิธีการจำลองวิธีแบบคงที่ ฉันใช้ JUnit 4 และ Mockito สำหรับเคสทดสอบของฉัน มีวิธีที่ดีในการเยาะเย้ย / ตรวจสอบกรณีการใช้งานที่เฉพาะเจาะจงนี้หรือไม่?

4
ละเว้นการทดสอบตามเงื่อนไขใน JUnit 4
ตกลงดังนั้น@Ignoreคำอธิบายประกอบจึงเหมาะสำหรับการทำเครื่องหมายว่าไม่ควรรันกรณีทดสอบ อย่างไรก็ตามบางครั้งฉันต้องการละเว้นการทดสอบตามข้อมูลรันไทม์ ตัวอย่างอาจเป็นได้ถ้าฉันมีการทดสอบพร้อมกันที่จำเป็นต้องเรียกใช้บนเครื่องที่มีคอร์จำนวนหนึ่ง หากการทดสอบนี้รันบนเครื่องประมวลผลเดี่ยวฉันไม่คิดว่ามันจะถูกต้องเพียงแค่ผ่านการทดสอบ (เนื่องจากยังไม่ได้รัน) และแน่นอนว่าจะไม่ถูกต้องที่จะล้มเหลวในการทดสอบและทำลายการสร้าง . ดังนั้นฉันจึงต้องการที่จะละเว้นการทดสอบที่รันไทม์เนื่องจากดูเหมือนว่าผลลัพธ์ที่ถูกต้อง (เนื่องจากกรอบการทดสอบจะอนุญาตให้บิลด์ผ่าน แต่บันทึกว่าการทดสอบไม่ได้ทำงาน) ฉันค่อนข้างแน่ใจว่าคำอธิบายประกอบจะไม่ให้ความยืดหยุ่นนี้แก่ฉันและสงสัยว่าฉันจะต้องสร้างชุดทดสอบสำหรับชั้นเรียนด้วยตนเอง อย่างไรก็ตามเอกสารไม่ได้พูดถึงอะไรเกี่ยวกับเรื่องนี้และมองผ่านAPIมันยังไม่ชัดเจนว่าจะทำอย่างไรในทางโปรแกรม (เช่นฉันจะสร้างอินสแตนซ์ของTestหรือคล้ายกัน@Ignoreอย่างไรโดยทางโปรแกรม หากใครเคยทำสิ่งที่คล้ายกันในอดีตหรือมีความคิดที่ชัดเจนว่าฉันจะทำสิ่งนี้ได้อย่างไรฉันยินดีที่จะรับฟัง

30
ฉันควรทดสอบวิธีการส่วนตัวหรือวิธีสาธารณะเท่านั้น [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดเมื่อปีที่แล้ว ปรับปรุงคำถามนี้ ฉันได้อ่านโพสต์นี้เกี่ยวกับวิธีทดสอบวิธีส่วนตัว ฉันมักจะไม่ทดสอบพวกเขาเพราะฉันมักจะคิดว่ามันเร็วกว่าที่จะทดสอบเฉพาะวิธีสาธารณะที่จะถูกเรียกจากนอกวัตถุ คุณทดสอบวิธีการส่วนตัวหรือไม่? ฉันควรทดสอบพวกเขาเสมอ

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