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

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

14
กรอบการจำลองที่ดีที่สุดสำหรับ Java คืออะไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องการอภิปรายการโต้แย้งการหยั่งเสียงหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ กรอบที่ดีที่สุดสำหรับการสร้างวัตถุจำลองใน Java คืออะไร ทำไม? ข้อดีและข้อเสียของแต่ละเฟรมเวิร์กคืออะไร

7
กลยุทธ์ที่ดีที่สุดสำหรับแอปพลิเคชันที่ใช้ฐานข้อมูลทดสอบคืออะไร
ฉันทำงานกับเว็บแอปพลิเคชั่นจำนวนมากที่ขับเคลื่อนโดยฐานข้อมูลที่มีความซับซ้อนแตกต่างกันในแบ็กเอนด์ โดยทั่วไปจะมีเลเยอร์ORMแยกต่างหากจากตรรกะทางธุรกิจและการนำเสนอ สิ่งนี้ทำให้การทดสอบหน่วยตรรกะทางธุรกิจตรงไปตรงมา สิ่งที่สามารถนำมาใช้ในโมดูลแยกและข้อมูลใด ๆ ที่จำเป็นสำหรับการทดสอบสามารถแกล้งผ่านการเยาะเย้ยวัตถุ แต่การทดสอบ ORM และฐานข้อมูลนั้นมักจะเต็มไปด้วยปัญหาและการประนีประนอม ในช่วงหลายปีที่ผ่านมาฉันได้ลองใช้กลยุทธ์สองสามข้อ โหลดฐานข้อมูลทดสอบด้วยข้อมูลที่ทราบ เรียกใช้การทดสอบกับ ORM และยืนยันว่าข้อมูลที่ถูกต้องกลับมา ข้อเสียของที่นี่คือฐานข้อมูลการทดสอบของคุณต้องติดตามการเปลี่ยนแปลงใด ๆ ของสคีมาในฐานข้อมูลแอปพลิเคชัน นอกจากนี้ยังขึ้นอยู่กับข้อมูลเทียมและอาจไม่เปิดเผยข้อบกพร่องที่เกิดขึ้นเนื่องจากการป้อนข้อมูลของผู้ใช้ที่โง่ ในที่สุดหากฐานข้อมูลทดสอบมีขนาดเล็กก็จะไม่เปิดเผยความไร้ประสิทธิภาพเช่นดัชนีที่ขาดหายไป (ตกลงว่าอันสุดท้ายไม่ใช่การทดสอบหน่วยที่ควรใช้ แต่ไม่เจ็บ) โหลดสำเนาของฐานข้อมูลการผลิตและทดสอบกับที่ ปัญหาที่นี่คือคุณอาจไม่รู้ว่ามีอะไรในฐานข้อมูลการผลิตในเวลาใดก็ตาม การทดสอบของคุณอาจต้องเขียนใหม่หากข้อมูลเปลี่ยนแปลงตลอดเวลา บางคนชี้ให้เห็นว่ากลยุทธ์ทั้งสองนี้ขึ้นอยู่กับข้อมูลที่เฉพาะเจาะจงและการทดสอบหน่วยควรทดสอบการทำงานเท่านั้น ด้วยเหตุนี้ฉันได้เห็นข้อเสนอแนะ: ใช้เซิร์ฟเวอร์ฐานข้อมูลจำลองและตรวจสอบเฉพาะว่า ORM กำลังส่งแบบสอบถามที่ถูกต้องเพื่อตอบสนองต่อการเรียกใช้เมธอดที่กำหนด คุณใช้กลยุทธ์อะไรในการทดสอบแอพพลิเคชันที่ใช้ฐานข้อมูลหากมี สิ่งที่ได้ผลดีที่สุดสำหรับคุณ

8
“ DAMP not DRY” หมายความว่าอย่างไรเมื่อพูดถึงการทดสอบหน่วย
ฉันได้ยินคนพูดว่าควรทดสอบหน่วย (เช่น nUnit, jUnit, xUnit) DAMPไม่แห้ง (เช่นการทดสอบหน่วยควรมี "รหัสชื้น" ไม่ใช่ "รหัสแห้ง") พวกเขากำลังพูดเกี่ยวกับอะไร?
345 unit-testing 



4
ฉันจะบอก Moq ให้ส่งคืนภารกิจได้อย่างไร
ฉันมีอินเตอร์เฟซที่ประกาศ Task DoSomethingAsync(); ฉันใช้ MoqFramework สำหรับการทดสอบ: [TestMethod()] public async Task MyAsyncTest() { Mock<ISomeInterface> mock = new Mock<ISomeInterface>(); mock.Setup(arg => arg.DoSomethingAsync()).Callback(() => { <my code here> }); ... } await DoSomethingAsync()จากนั้นในการทดสอบของฉันฉันรันโค้ดที่จะเรียก และการทดสอบล้มเหลวในบรรทัดนั้น ผมทำอะไรผิดหรือเปล่า?

7
Mockito: วิธีการตรวจสอบวิธีการถูกเรียกบนวัตถุที่สร้างขึ้นภายในวิธี?
ฉันใหม่กับ Mockito จากคลาสด้านล่างฉันจะใช้ Mockito เพื่อตรวจสอบว่าsomeMethodถูกเรียกใช้หลังจากfooถูกเรียกได้อย่างไร public class Foo { public void foo(){ Bar bar = new Bar(); bar.someMethod(); } } ฉันต้องการโทรยืนยันดังต่อไปนี้ verify(bar, times(1)).someMethod(); ที่เป็นเช่นล้อเลียนของbarBar

15
ฉันจะรันการทดสอบหน่วย Python ทั้งหมดในไดเรกทอรีได้อย่างไร
ฉันมีไดเรกทอรีที่มีการทดสอบหน่วย Python ของฉัน โมดูลหน่วยทดสอบแต่ละที่ของรูปแบบการทดสอบ _ *. PY ฉันกำลังพยายามสร้างไฟล์ที่เรียกว่าall_test.pyซึ่งจะช่วยให้คุณเดาได้ว่ารันไฟล์ทั้งหมดในแบบทดสอบข้างต้นแล้วส่งคืนผลลัพธ์ ฉันได้ลองสองวิธีจนถึงตอนนี้ ทั้งสองล้มเหลว ฉันจะแสดงสองวิธีและฉันหวังว่าจะมีคนรู้วิธีการทำอย่างถูกต้อง สำหรับความพยายามที่กล้าหาญครั้งแรกของฉันฉันคิดว่า "ถ้าฉันเพียงนำเข้าโมดูลการทดสอบทั้งหมดของฉันในไฟล์แล้วเรียกunittest.main()doodad นี้มันจะทำงานใช่มั้ย" เอาล่ะฉันคิดผิด import glob import unittest testSuite = unittest.TestSuite() test_file_strings = glob.glob('test_*.py') module_strings = [str[0:len(str)-3] for str in test_file_strings] if __name__ == "__main__": unittest.main() สิ่งนี้ไม่ทำงานผลลัพธ์ที่ฉันได้คือ: $ python all_test.py ---------------------------------------------------------------------- Ran 0 tests in 0.000s OK สำหรับการลองครั้งที่สองของฉันฉันก็โอเคบางทีฉันอาจจะลองทำแบบทดสอบทั้งหมดนี้ในแบบ "แมนนวล" …

20
อะไรคือความแตกต่างระหว่างการรวมเข้ากับการทดสอบหน่วย?
ฉันรู้คำนิยามตำราเรียนที่เรียกว่าการทดสอบหน่วยและการทดสอบการรวม สิ่งที่ฉันอยากรู้คือเมื่อถึงเวลาเขียนการทดสอบหน่วย ... ฉันจะเขียนเพื่อให้ครอบคลุมชุดเรียนมากที่สุด ตัวอย่างเช่นถ้าฉันมีWordชั้นเรียนฉันจะเขียนการทดสอบหน่วยสำหรับWordชั้นเรียน จากนั้นฉันเริ่มเขียนSentenceชั้นเรียนของฉันและเมื่อจำเป็นต้องมีปฏิสัมพันธ์กับWordชั้นเรียนฉันมักจะเขียนแบบทดสอบหน่วยเพื่อที่จะทดสอบทั้งสองSentenceและWord... อย่างน้อยในสถานที่ที่พวกเขามีปฏิสัมพันธ์ การทดสอบเหล่านี้กลายเป็นการทดสอบการรวมเข้าด้วยกันเพราะตอนนี้พวกเขาทดสอบการรวมกันของ 2 คลาสเหล่านี้หรือเป็นเพียงการทดสอบหน่วยที่ครอบคลุม 2 คลาส? โดยทั่วไปแล้วเนื่องจากบรรทัดที่ไม่แน่นอนนี้ฉันจะไม่ค่อยเขียนแบบทดสอบการรวม ... หรือฉันใช้ผลิตภัณฑ์สำเร็จรูปเพื่อดูว่าชิ้นส่วนทั้งหมดทำงานได้อย่างถูกต้องกับการทดสอบการรวมตัวจริงหรือไม่แม้ว่าพวกเขาจะเป็นคู่มือและไม่ค่อยทำซ้ำเกินขอบเขต ของแต่ละคุณสมบัติ? ฉันเข้าใจผิดการทดสอบการรวมหรือมีความแตกต่างเพียงเล็กน้อยระหว่างการทดสอบการรวมและการทดสอบหน่วย?

4
Mockito สามารถตั้งวิธีโดยไม่คำนึงถึงข้อโต้แย้งได้หรือไม่?
ฉันพยายามทดสอบรหัสดั้งเดิมโดยใช้ Mockito ฉันต้องการ stub a FooDaoที่ใช้ในการผลิตดังนี้: foo = fooDao.getBar(new Bazoo()); ฉันเขียนได้: when(fooDao.getBar(new Bazoo())).thenReturn(myFoo); แต่ปัญหาที่ชัดเจนgetBar()คือไม่เคยถูกเรียกด้วยBazooวัตถุเดียวกันกับที่ฉัน stubbed วิธีการ (สาปแช่งnewผู้ประกอบการนั้น!) ฉันจะรักมันถ้าฉันสามารถ stub วิธีในวิธีที่มันกลับmyFooโดยไม่คำนึงถึงการโต้แย้ง ความล้มเหลวนั้นฉันจะฟังคำแนะนำการแก้ปัญหาอื่น ๆ แต่ฉันอยากจะหลีกเลี่ยงการเปลี่ยนรหัสการผลิตจนกว่าจะครอบคลุมการทดสอบที่สมเหตุสมผล

30
ทำให้วิธีส่วนตัวเป็นแบบสาธารณะเพื่อทดสอบหน่วย…เป็นความคิดที่ดี?
ผู้ดำเนินรายการหมายเหตุ: มี 39 คำตอบที่โพสต์แล้วที่นี่ (บางคำถูกลบไปแล้ว) ก่อนที่คุณโพสต์ของคุณคำตอบพิจารณาหรือไม่ว่าคุณสามารถเพิ่มสิ่งที่มีความหมายกับการอภิปราย คุณมีโอกาสมากกว่าที่จะทำซ้ำในสิ่งที่คนอื่นพูดไปแล้ว บางครั้งฉันพบว่าตัวเองต้องการวิธีการแบบส่วนตัวในที่สาธารณะในชั้นเรียนเพื่อเขียนการทดสอบหน่วยบางอย่างสำหรับมัน โดยทั่วไปแล้วจะเป็นเพราะวิธีการนี้มีตรรกะที่ใช้ร่วมกันระหว่างวิธีอื่น ๆ ในชั้นเรียนและเป็นระเบียบเรียบร้อยมากขึ้นในการทดสอบตรรกะด้วยตนเองหรือเหตุผลอื่นอาจเป็นไปได้ถ้าฉันต้องการทดสอบตรรกะที่ใช้ในเธรดแบบซิงโครนัส . คนอื่นคิดว่าตัวเองกำลังทำสิ่งนี้อยู่หรือเปล่าเพราะฉันไม่ชอบทำมันจริงเหรอ? โดยส่วนตัวแล้วฉันคิดว่าโบนัสนั้นมีค่ามากกว่าปัญหาในการทำให้วิธีการเป็นสาธารณะซึ่งไม่ได้ให้บริการใด ๆ นอกห้องเรียน ... UPDATE ขอบคุณสำหรับคำตอบทุกคนดูเหมือนว่าจะทำให้คนสนใจป่องๆ ฉันคิดว่าฉันทามติทั่วไปคือการทดสอบควรเกิดขึ้นผ่าน API สาธารณะเนื่องจากนี่เป็นวิธีเดียวที่จะใช้คลาสนี้และฉันเห็นด้วยกับสิ่งนี้ สองสามกรณีที่ฉันกล่าวถึงข้างต้นที่ฉันจะทำเช่นนี้เป็นกรณีที่ผิดปกติและฉันคิดว่าประโยชน์ของการทำมันคุ้มค่า อย่างไรก็ตามฉันสามารถเห็นทุกคนชี้ว่ามันไม่ควรเกิดขึ้นจริง และเมื่อคิดเกี่ยวกับมันอีกเล็กน้อยฉันคิดว่าการเปลี่ยนรหัสของคุณเพื่อรองรับการทดสอบเป็นความคิดที่ไม่ดี - หลังจากทั้งหมดฉันคิดว่าการทดสอบเป็นเครื่องมือสนับสนุนในทางและการเปลี่ยนระบบเป็น 'สนับสนุนเครื่องมือสนับสนุน' ถ้าคุณพอใจ การปฏิบัติที่ไม่ดี
301 c#  java  unit-testing 


10
เปรียบเทียบกรอบการทดสอบหน่วย C ++ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องการอภิปรายการโต้แย้งการหยั่งเสียงหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันรู้ว่ามีคำถามสองสามข้อเกี่ยวกับคำแนะนำสำหรับกรอบการทดสอบหน่วย C ++ แต่คำตอบทั้งหมดไม่ได้ช่วยเพราะพวกเขาเพิ่งแนะนำหนึ่งในกรอบ แต่ไม่ได้ให้ข้อมูลใด ๆ เกี่ยวกับการเปรียบเทียบ (คุณสมบัติ) ฉันคิดว่ากรอบที่น่าสนใจที่สุดคือ CppUnit, Boost และกรอบการทดสอบใหม่ของ Google มีใครเปรียบเทียบบ้างไหม?

9
จะยืนยันได้อย่างไรว่ามีข้อยกเว้นเกิดขึ้นใน pytest?
รหัส: # coding=utf-8 import pytest def whatever(): return 9/0 def test_whatever(): try: whatever() except ZeroDivisionError as exc: pytest.fail(exc, pytrace=True) เอาท์พุท: ================================ test session starts ================================= platform linux2 -- Python 2.7.3 -- py-1.4.20 -- pytest-2.5.2 plugins: django, cov collected 1 items pytest_test.py F ====================================== FAILURES ====================================== ___________________________________ test_whatever ____________________________________ def test_whatever(): …

10
การทดสอบหน่วยวิธีส่วนตัวใน C #
Visual Studio อนุญาตให้ทดสอบหน่วยวิธีการส่วนตัวผ่านคลาส accessor ที่สร้างขึ้นโดยอัตโนมัติ ฉันได้เขียนการทดสอบของวิธีการส่วนตัวที่รวบรวมเรียบร้อยแล้ว แต่ล้มเหลวขณะใช้งานจริง โค้ดในเวอร์ชันที่ค่อนข้างน้อยและการทดสอบคือ: //in project MyProj class TypeA { private List<TypeB> myList = new List<TypeB>(); private class TypeB { public TypeB() { } } public TypeA() { } private void MyFunc() { //processing of myList that changes state of instance } } //in project TestMyProj …
292 c#  unit-testing 

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