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

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

5
การทดสอบหน่วยในโลก“ ไม่มีตัวตั้ง”
ฉันไม่คิดว่าตัวเองเป็นผู้เชี่ยวชาญ DDD แต่ในฐานะสถาปนิกโซลูชันพยายามใช้แนวทางปฏิบัติที่ดีที่สุดเท่าที่จะทำได้ ฉันรู้ว่ามีการถกเถียงกันอย่างมากมายเกี่ยวกับ "สไตล์" setter ของมือโปรและผู้ต่อต้านใน DDD และฉันสามารถเห็นการโต้แย้งทั้งสองด้าน ปัญหาของฉันคือฉันทำงานเป็นทีมที่มีทักษะความรู้และประสบการณ์ที่หลากหลายซึ่งหมายความว่าฉันไม่สามารถไว้วางใจได้ว่านักพัฒนาทุกคนจะทำสิ่งที่ "ถูกต้อง" ตัวอย่างเช่นหากวัตถุโดเมนของเราได้รับการออกแบบเพื่อให้การเปลี่ยนแปลงสถานะภายในของวัตถุดำเนินการโดยวิธีการ แต่ให้ผู้ตั้งค่าทรัพย์สินสาธารณะบางคนจะหลีกเลี่ยงไม่ได้ตั้งค่าคุณสมบัติแทนการเรียกวิธีการ ใช้ตัวอย่างนี้: public class MyClass { public Boolean IsPublished { get { return PublishDate != null; } } public DateTime? PublishDate { get; set; } public void Publish() { if (IsPublished) throw new InvalidOperationException("Already published."); PublishDate = DateTime.Today; …

7
คุณภาพของรหัสในการทดสอบหน่วย?
เมื่อเขียนการทดสอบหน่วยควรใช้เวลาเพิ่มเติมเพื่อให้รหัสมีคุณภาพและอ่านง่ายหรือไม่ เมื่อทำการทดสอบฉันมักจะผิดกฎของ Demeterเพื่อการเขียนที่เร็วขึ้นและเพื่อหลีกเลี่ยงการใช้ตัวแปรจำนวนมาก ในทางเทคนิคแล้วการทดสอบหน่วยจะไม่ถูกนำมาใช้ซ้ำโดยตรง - มันถูกผูกไว้กับรหัสอย่างเคร่งครัดดังนั้นฉันจึงไม่เห็นเหตุผลที่จะใช้เวลากับพวกเขามากนัก พวกเขาจะต้องใช้งานได้เท่านั้น

13
การทดสอบหน่วยทำงานอย่างไร
ฉันกำลังพยายามทำให้รหัสของฉันแข็งแกร่งขึ้นและฉันได้อ่านเกี่ยวกับการทดสอบหน่วย แต่ฉันพบว่ามันยากมากที่จะหาการใช้งานจริงที่มีประโยชน์ ตัวอย่างเช่นวิกิพีเดียตัวอย่าง : public class TestAdder { public void testSum() { Adder adder = new AdderImpl(); assert(adder.add(1, 1) == 2); assert(adder.add(1, 2) == 3); assert(adder.add(2, 2) == 4); assert(adder.add(0, 0) == 0); assert(adder.add(-1, -2) == -3); assert(adder.add(-1, 1) == 0); assert(adder.add(1234, 988) == 2222); } } ฉันรู้สึกว่าการทดสอบนี้ไร้ประโยชน์โดยสิ้นเชิงเนื่องจากคุณจำเป็นต้องคำนวณผลลัพธ์ที่ต้องการและทดสอบด้วยตนเองฉันรู้สึกว่าการทดสอบหน่วยที่ดีกว่าที่นี่จะเป็น assert(adder.add(a, b) …

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

16
ใครเป็นผู้พัฒนาระบบทดสอบ
ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันทำงานในพื้นที่ขององค์กรในช่วง 4 ปีที่ผ่านมาและสังเกตว่าโดยทั่วไปแล้วองค์กรต่าง ๆ ไม่เอื้อต่อสภาพแวดล้อมในการพัฒนารูปแบบการทดสอบครั้งแรก โครงการมักจะคงที่ค่าใช้จ่ายคงที่ระยะเวลาและลักษณะน้ำตก การทดสอบหน่วยใด ๆ หากทำได้เลยมักเกิดขึ้นหลังจากการพัฒนาในเฟส QA และดำเนินการโดยทีมอื่น ก่อนที่จะทำงานให้กับองค์กรฉันได้ปรึกษากับ บริษัท ขนาดเล็กถึงขนาดกลางและไม่มีใครเต็มใจจ่ายเงินสำหรับโครงการพัฒนารูปแบบการทดสอบครั้งแรก พวกเขามักต้องการให้การพัฒนาเริ่มต้นทันทีหรือหลังจากการออกแบบสั้น ๆ นั่นคือมีบางสิ่งที่คล้ายกับ Agile มากกว่าแม้ว่าลูกค้าบางคนต้องการทุกสิ่งที่ทำแผนที่คล้ายกับน้ำตก ร้านค้า บริษัท และลูกค้าประเภทใดที่การพัฒนาโดยอาศัยการทดสอบนั้นทำงานได้ดีที่สุด? โครงการประเภทใดที่เอื้อต่อ TDD

3
ทำไมคุณถึงเขียนหน่วยทดสอบสำหรับคอนโทรลเลอร์?
สำหรับฉันนี่คือการทดสอบหน่วยที่ไม่เกี่ยวข้องโดยสิ้นเชิงและฉันไม่เข้าใจว่าทำไมบางคนถึงใช้เวลาเขียนมันเนื่องจากมีค่าน้อยมากที่จะได้รับจากมัน ฉันจะรู้ได้อย่างสมบูรณ์แบบว่าตัวควบคุมนี้ส่งคืนชนิดที่ต้องการโดยดำเนินการวิธีการในเบราว์เซอร์ จริงๆแล้วคุณเชื่อหรือไม่ว่าการทดสอบจำเป็นสำหรับสิ่งนี้และเพราะเหตุใด public class ConstituencyControllerTests { private ConstituencyController _constituencyController; private Mock<IConstituencyService> _IConstituencyServiceMock; public ConstituencyControllerTests() { _IConstituencyServiceMock = new Mock<IConstituencyService>(); } [Test] public async Task I_Check_For_Return_Type_And_Result() { _constituencyController = new ConstituencyController( _IConstituencyServiceMock.Object ); var result = await _constituencyController.Get(); var content = ( (dynamic)result ).Content; Assert.IsEmpty( content ); Assert.IsInstanceOf( typeof( System.Web.Http.Results.OkNegotiatedContentResult<IEnumerable<ListOfConstituencies>> …

4
ฉันจะใช้การทดสอบหน่วยและ TDD เพื่อทดสอบแอพที่ขึ้นอยู่กับการดำเนินการ CRUD ของฐานข้อมูลเป็นส่วนใหญ่ได้อย่างไร
ที่ทำงานหนึ่งในโครงการของฉันส่วนใหญ่เกี่ยวกับการรับส่งข้อมูลจากไคลเอนต์ภายนอกและเก็บไว้ในฐานข้อมูล มันเป็นแอพพลิเคชั่นขององค์กร Java ที่ใช้ JPA และตรรกะส่วนใหญ่ของเราหมุนรอบการดำเนินการ CRUD ข้อบกพร่องส่วนใหญ่ของเราเกี่ยวข้องกับ JPA ไม่ทางใดก็ทางหนึ่ง ตัวอย่างที่ 1: ถ้าคุณคลิกปุ่มบันทึกสองครั้ง JPA อาจลองแทรกเอนทิตีเดียวกันในฐานข้อมูลเป็นครั้งที่สองทำให้เกิดการละเมิดคีย์หลัก ตัวอย่างที่ 2: คุณดึงเอนทิตีจากฐานข้อมูลแก้ไขและลองอัปเดตข้อมูล JPA อาจพยายามสร้างอินสแตนซ์ใหม่แทนการอัปเดตเก่า บ่อยครั้งที่โซลูชันต้องการเพิ่ม / ลบ / เปลี่ยนคำอธิบายประกอบ JPA บางครั้งก็เกี่ยวข้องกับการปรับเปลี่ยนตรรกะ DAO ฉันไม่สามารถหาวิธีที่จะมั่นใจในโค้ดของเราโดยใช้การทดสอบหน่วยและ TDD ฉันไม่แน่ใจว่าเป็นเพราะการทดสอบหน่วยและ TDD นั้นไม่เหมาะสมหรือถ้าฉันเข้าใกล้ปัญหาผิด การทดสอบหน่วยดูเหมือนจะไม่เหมาะสมเพราะฉันสามารถค้นพบปัญหาเหล่านี้ที่รันไทม์เท่านั้นและฉันจำเป็นต้องปรับใช้กับเซิร์ฟเวอร์แอปเพื่อสร้างปัญหาขึ้นมาใหม่ โดยปกติฐานข้อมูลจะต้องเกี่ยวข้องซึ่งฉันคิดว่าอยู่นอกนิยามของการทดสอบหน่วย: นี่คือการทดสอบการรวม TDD ดูเหมือนว่าไม่เหมาะสมเพราะการปรับใช้ + ข้อเสนอแนะการทดสอบช้ามากทำให้ฉันไม่ได้ผลมาก การปรับใช้ + ข้อเสนอแนะการทดสอบวนใช้เวลา 3 นาทีและนั่นก็ต่อเมื่อฉันรันการทดสอบเฉพาะเกี่ยวกับรหัสที่ฉันเขียน ในการรันการทดสอบการรวมระบบทั้งหมดจะใช้เวลา 30+ นาที มีรหัสอยู่นอกแม่พิมพ์นี้และฉันมักจะทดสอบหน่วยทุกครั้งที่ทำได้ แต่ข้อบกพร่องส่วนใหญ่ของเราและช่วงเวลาที่ยิ่งใหญ่ที่สุดมักเกี่ยวข้องกับ …
22 java  unit-testing  tdd  jpa 

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

2
ฉันจะสร้างสภาพแวดล้อมที่การทดสอบแก้ไขถูกมองว่าเป็นลำดับความสำคัญได้อย่างไร
ฉันเป็นวิศวกรซอฟต์แวร์ที่ บริษัท ขนาดกลาง เรามีแพลตฟอร์มการทดสอบที่ค่อนข้างแข็งแกร่งซึ่งใช้งานบน TeamCity มันทำการทดสอบหน่วยในการเช็คอินทุกครั้งและการทดสอบหน่วย / BVT รายวัน ปัญหาคือ - เรามีการทดสอบหน่วยแตกหัก บ่อยครั้งที่ฉันนำมาซึ่งความไม่มีจุดหมายของการทดสอบหน่วยหากพวกเขาแตกหักและไม่ทำความสะอาด การไม่สามารถดูได้ว่าการเปลี่ยนแปลงทำให้เกิดการถดถอยจะลบมูลค่าส่วนใหญ่ของแพลตฟอร์มการทดสอบหน่วย ฉันต้องการปลูกเมล็ดพันธุ์ที่จะสร้างวัฒนธรรมของนิสัยที่ดี - แก้ไขการทดสอบเมื่อพวกเขาแตกหักเห็นว่ามันมีค่าจัดลำดับความสำคัญของการแก้ไขการทดสอบพร้อมกับงานอื่น ๆ ฉันได้ลองติดสินบน (ขนมอบ) แล้วก็ถามธรรมดาและพูดกับหัวหน้าทีม ทุกคนบอกว่ามันเป็นความคิดที่ดี แต่ฉันเห็นว่าเป็นคนเดียวที่ทำอะไรเกี่ยวกับมัน วิธีที่ดีที่สุดในการเริ่มต้นกระตุ้นให้ผู้อื่นแก้ไขการทดสอบของพวกเขาคืออะไรและจัดลำดับความสำคัญการทดสอบภายในการวิ่งของพวกเขา หากมีวิธีอัตนัยน้อยกว่าที่จะถามสิ่งนี้ฉันยินดีที่จะยอมรับเคล็ดลับใด ๆ

6
ฉันจะทดสอบรหัสทดสอบได้อย่างไร
หนึ่งในสองสามสิ่งที่นักพัฒนาซอฟต์แวร์ส่วนใหญ่เห็นด้วยคือคุณไม่ควรใช้โค้ดในการทำงานอย่างถูกต้องเว้นแต่คุณจะทดสอบ หากคุณไม่ทดสอบอาจมีข้อบกพร่องซ่อนเร้นที่จะทำให้คุณทำงานได้มากขึ้น ฉันเข้าใจวิธีทดสอบรหัสปกติของฉัน แต่ฉันควรทดสอบรหัสทดสอบอย่างไรเพื่อให้แน่ใจว่าสามารถค้นหาและรายงานข้อผิดพลาดได้อย่างมีประสิทธิภาพเมื่อมี โดยส่วนตัวฉันโง่พอที่จะเขียนกรณีทดสอบที่ผิดพลาดซึ่งจะเกิดขึ้นเมื่อไม่ควรทำดังนั้นจึงต้องเอาชนะวัตถุประสงค์ของการทดสอบการเขียนของฉันตั้งแต่แรก โชคดีที่ฉันพบและแก้ไขข้อผิดพลาดในเวลา แต่ตามการทดสอบมนต์ดูเหมือนว่าไม่มีชุดทดสอบจะเสร็จสมบูรณ์โดยไม่ต้องมีชุดทดสอบของตัวเองเพื่อให้แน่ใจว่ามันทำงานได้ สำหรับฉันดูเหมือนว่าวิธีที่ดีที่สุดในการทำเช่นนี้คือเพื่อให้แน่ใจว่าการทดสอบล้มเหลวสำหรับรหัสบั๊กกี้ * ถ้าฉันใช้เวลา 2 นาทีสลับกันเพิ่มข้อผิดพลาดในรหัสและทำให้แน่ใจว่าล้มเหลวฉันควรมีความมั่นใจในระดับที่ยอมรับได้ว่า การทดสอบ 'ทำงาน' สิ่งนี้นำมาสู่คำถามที่สองของฉัน: อะไรคือวิธีที่ดีในการแนะนำข้อบกพร่องเพื่อให้แน่ใจว่าพวกเขาถูกจับในกรณีทดสอบ? ฉันควรสุ่มแสดงความคิดเห็นงบตรวจสอบให้แน่ใจว่าสาขาที่ไม่ถูกต้องของการif-elseเรียกใช้โดยปฏิเสธสภาพของมันและเปลี่ยนลำดับการดำเนินการของรหัสที่มีผลข้างเคียง ฯลฯ จนกว่าฉันจะพอใจการทดสอบของฉันจะจับมากที่สุดโรคจิตที่พบบ่อย? นักพัฒนามืออาชีพตรวจสอบว่าการทดสอบทำในสิ่งที่ควรทำอย่างไร พวกเขาแค่คิดว่าการทดสอบทำงานหรือพวกเขาใช้เวลาในการทดสอบเช่นกัน? ถ้าเป็นเช่นนั้นพวกเขาจะทำการทดสอบอย่างไร ฉันไม่ได้แนะนำให้ผู้คนควรใช้เวลามากในการทดสอบการทดสอบแล้วทดสอบการทดสอบเพื่อทดสอบว่าพวกเขาไม่เคยเขียนรหัสจริง แต่ฉันได้ทำสิ่งที่โง่พอที่ฉันรู้สึกว่าฉันจะได้ประโยชน์จากนิดหน่อย ของ 'การทดสอบ meta' และอยากรู้เกี่ยวกับวิธีที่ดีที่สุดที่จะไปเกี่ยวกับมัน : D * ฉันสามารถตรวจสอบเพื่อดูว่าการทดสอบผ่านเมื่อการทดสอบรหัส 'ปราศจากข้อผิดพลาด' แต่การใช้รหัสเป็นข้อมูลจำเพาะสำหรับการทดสอบดูค่อนข้างย้อนหลัง ...

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

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 () ดีไหม …

6
มาตรฐานการเข้ารหัสหน่วยทดสอบ
โดยปกติเมื่อพูดถึงมาตรฐานการเข้ารหัสเราอ้างถึงรหัสของโปรแกรม แต่สิ่งที่เกี่ยวกับการทดสอบหน่วย? มีแนวทางมาตรฐานการเข้ารหัสบางอย่างที่ไม่ซ้ำกับการทดสอบหน่วย? พวกเขาคืออะไร

6
การทดสอบหน่วยใช้เป็นเอกสารจริงๆหรือไม่
ฉันไม่สามารถนับจำนวนครั้งที่ฉันอ่านข้อความในหลอดเลือดดำของ 'การทดสอบหน่วยเป็นแหล่งสำคัญของเอกสารของรหัสภายใต้การทดสอบ' ฉันไม่ปฏิเสธพวกเขาจริง แต่โดยส่วนตัวแล้วฉันไม่พบว่าตัวเองใช้มันเป็นเอกสาร สำหรับกรอบทั่วไปฉันใช้วิธีการประกาศเอกสารพฤติกรรมของพวกเขาและนั่นคือทั้งหมดที่ฉันต้องการ และฉันคิดว่าหน่วยทดสอบทุกอย่างสำรองข้อมูลที่ระบุไว้ในเอกสารนั้นรวมทั้งมีบางสิ่งภายในเพิ่มเติมดังนั้นในด้านหนึ่งจะทำสำเนาข้อมูลซ้ำในขณะที่อีกด้านหนึ่งอาจเพิ่มบางอย่างที่ไม่เกี่ยวข้อง ดังนั้นคำถามคือเมื่อใช้การทดสอบหน่วยเป็นเอกสาร? เมื่อความคิดเห็นไม่ครอบคลุมทุกอย่าง? โดยผู้พัฒนาขยายแหล่งข้อมูลหรือไม่ และสิ่งที่พวกเขาแสดงให้เห็นว่ามีประโยชน์และเกี่ยวข้องที่ตัวเอกสารเองไม่สามารถเปิดเผยได้?

5
กำลังทดสอบรายการ ... ทั้งหมดในการทดสอบเดียวกันหรือหนึ่งการทดสอบสำหรับแต่ละเงื่อนไข?
ฉันกำลังทดสอบว่าฟังก์ชั่นทำตามที่คาดไว้ในรายการ ดังนั้นฉันต้องการทดสอบ f(null) -> null f(empty) -> empty f(list with one element) -> list with one element f(list with 2+ elements) -> list with the same number of elements, doing what expected วิธีที่ดีที่สุดคืออะไร? การทดสอบทุกกรณีในการทดสอบ (method) เดียวกันภายใต้ชื่อ "WorksAsExpected" วางหนึ่งการทดสอบสำหรับแต่ละกรณีจึงมี "WorksAsExpectedWhenNull" "WorksAsExpectedWhenEmpty" "WorksAsExpectedWhenSingleElement" "WorksAsExpectedWhenMoreElements" อีกทางเลือกหนึ่งที่ฉันไม่ได้คิด :-)
21 unit-testing  tdd 

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