คำถามติดแท็ก stub

8
วิธีการทดสอบหน่วยควรจะเขียนโดยไม่เยาะเย้ยอย่างกว้างขวาง?
ตามที่ผมเข้าใจจุดของการทดสอบหน่วยคือการทดสอบหน่วยของรหัสในการแยก หมายความว่า: พวกเขาไม่ควรทำลายโดยการเปลี่ยนแปลงรหัสที่ไม่เกี่ยวข้องใดๆ ใน codebase การทดสอบหน่วยเดียวควรทำลายข้อบกพร่องในหน่วยการทดสอบซึ่งตรงข้ามกับการทดสอบการรวม (ซึ่งอาจแบ่งเป็นฮีป) ทั้งหมดนี้แสดงถึงว่าควรมีการเยาะเย้ยจากภายนอกหน่วยทดสอบ และฉันหมายถึงการพึ่งพาภายนอกทั้งหมดไม่เพียง แต่ "เลเยอร์นอก" เช่นระบบเครือข่ายระบบไฟล์ฐานข้อมูล ฯลฯ นี้นำไปสู่ข้อสรุปเชิงตรรกะที่แทบทุกหน่วยทดสอบความต้องการที่จะเยาะเย้ย ในทางกลับกันการค้นหาอย่างรวดเร็วของ Google เกี่ยวกับการเยาะเย้ยเผยให้เห็นบทความมากมายที่อ้างว่า "การเยาะเย้ยเป็นกลิ่นรหัส" และส่วนใหญ่ควรหลีกเลี่ยง (แม้ว่าจะไม่สมบูรณ์) ตอนนี้สำหรับคำถาม การทดสอบหน่วยควรเขียนอย่างถูกต้องอย่างไร? เส้นแบ่งระหว่างพวกเขากับการทดสอบการรวมอยู่ตรงไหน? อัปเดต 1 โปรดพิจารณารหัสหลอกต่อไปนี้: class Person { constructor(calculator) {} calculate(a, b) { const sum = this.calculator.add(a, b); // do some other stuff with the `sum` } } การทดสอบที่ทดสอบPerson.calculateวิธีการโดยไม่มีการเยาะเย้ยการCalculatorพึ่งพา …

3
การขัดหมายถึงอะไรในการเขียนโปรแกรม?
ฉันมักจะได้ยินคำว่า "ต้นขั้ว", "ต้นขั้วบางอย่างออก", "ต้นขั้ว" และอื่น ๆ การขัดหมายถึงอะไรในการเขียนโปรแกรมและคำนั้นมาจากไหน สามารถใช้บริบทใดได้บ้าง

3
การปลอมตัวเป็นส่วนหนึ่งของชั้นเรียนภายใต้การทดสอบหรือไม่?
สมมติว่าฉันมีชั้นเรียน (ยกโทษให้ตัวอย่างที่ออกแบบและการออกแบบที่ไม่ดีของมัน): class MyProfit { public decimal GetNewYorkRevenue(); public decimal GetNewYorkExpenses(); public decimal GetNewYorkProfit(); public decimal GetMiamiRevenue(); public decimal GetMiamiExpenses(); public decimal GetMiamiProfit(); public bool BothCitiesProfitable(); } (หมายเหตุเมธอด GetxxxRevenue () และ GetxxxExpenses () มีการขึ้นต่อกันที่ถูกสตับออก) ตอนนี้ฉันกำลังทดสอบหน่วย BothCitiesProfitable () ซึ่งขึ้นอยู่กับ GetNewYorkProfit () และ GetMiamiProfit () การรับ GetNewYorkProfit () และ GetMiamiProfit () ดีไหม …

4
mocks ละเมิดหลักการเปิด / ปิดหรือไม่?
เมื่อนานมาแล้วที่ฉันอ่านคำตอบสแต็คโอเวอร์โฟลว์ที่ฉันหาไม่พบประโยคที่อธิบายว่าคุณควรทดสอบ API สาธารณะและผู้เขียนบอกว่าคุณควรทดสอบอินเทอร์เฟซ ผู้เขียนอธิบายว่าหากมีการเปลี่ยนแปลงวิธีการใช้งานคุณไม่จำเป็นต้องแก้ไขกรณีทดสอบเนื่องจากการทำเช่นนี้จะเป็นการผิดสัญญาที่ทำให้ระบบภายใต้การทดสอบทำงานได้ กล่าวอีกนัยหนึ่งการทดสอบควรล้มเหลวหากวิธีการไม่ทำงาน แต่ไม่ใช่เพราะการใช้งานมีการเปลี่ยนแปลง สิ่งนี้เรียกร้องความสนใจของฉันเมื่อเราพูดถึงการล้อเลียน เนื่องจากการเยาะเย้ยต้องอาศัยการเรียกร้องอย่างคาดหวังจากระบบภายใต้การทดสอบของผู้ทดสอบดังนั้น mocks จึงผนวกเข้ากับการใช้งานอย่างแน่นหนามากกว่าอินเตอร์เฟส ในขณะที่ทำการค้นคว้าmock vs stubหลายบทความเห็นด้วยว่าควรใช้ต้นขั้วแทน mocks เนื่องจากไม่ต้องพึ่งพาความคาดหวังจากการพึ่งพาซึ่งหมายความว่าการทดสอบไม่จำเป็นต้องมีความรู้เกี่ยวกับระบบพื้นฐานภายใต้การใช้งานการทดสอบ คำถามของฉันจะเป็น: mocks ละเมิดหลักการเปิด / ปิดหรือไม่? มีบางสิ่งที่ขาดหายไปในการโต้แย้งเพื่อช่วยสตับในย่อหน้าสุดท้ายที่ทำให้สตับไม่ดีเทียบกับ mocks หรือไม่? ถ้าเป็นเช่นนั้นเมื่อไรจะเป็นกรณีการใช้งานที่ดีในการเยาะเย้ยและเมื่อไหร่จะเป็นกรณีการใช้งานที่ดีในการใช้สตับ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.