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

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

6
เปรียวโดยไม่ต้องทดสอบหน่วย
มันสมเหตุสมผลหรือไม่ที่จะพูดถึง "การพัฒนาที่คล่องตัว" หรืออ้างว่าคุณกำลังใช้ "วิธีการที่คล่องตัว" ถ้ารหัสฐานที่คุณกำลังทำงานอยู่มีการครอบคลุมการทดสอบหน่วย 0% (และคุณในฐานะทีมไม่ได้ทำอะไรเกี่ยวกับเรื่องนี้) เพื่อให้ชัดเจน: สำหรับฉันมันไม่สมเหตุสมผล จากประสบการณ์ส่วนตัวของฉันฉันพบว่าการทดสอบหน่วยเป็นเครื่องมือเดียวที่ช่วยให้คุณ "คล่องแคล่ว" (เช่นตอบสนองต่อการเปลี่ยนแปลงปรับปรุงการออกแบบของคุณแบ่งปันความรู้ ฯลฯ ) และ TDD เป็นวิธีปฏิบัติเดียวที่จะพาคุณไปที่นั่น . อาจมีวิธีอื่นบ้าง แต่ฉันก็ยังไม่เห็นว่าพวกเขาจะทำงานได้อย่างไร

7
ฉันควรจะกังวลเกี่ยวกับการมอบหมายโปรแกรม overengineering ให้ในระหว่างการสัมภาษณ์? [ปิด]
ฉันเพิ่งได้สัมภาษณ์ทางโทรศัพท์กับ บริษัท หลังจากการสัมภาษณ์ทางโทรศัพท์ฉันได้รับคำสั่งให้ทำการเขียนโปรแกรมสั้น ๆ (โปรแกรมขนาดเล็กไม่ควรใช้เวลาเกินสามชั่วโมง) ฉันได้รับคำสั่งโดยตรงเท่านั้นที่จะเสร็จสิ้นการมอบหมายและเปิดรหัส ฉันได้รับอิสระอย่างเต็มที่ในการใช้ภาษาใด ๆ ที่ฉันต้องการและไม่ได้บอกอย่างชัดเจนถึงวิธีการเปลี่ยนรหัส ทันทีที่ฉันวางแผนจะโยนมันลงบน Github เขียนชุดทดสอบโดยใช้ Travis-CI (รวมอย่างต่อเนื่องฟรีสำหรับที่เก็บ Github สาธารณะ) เพื่อเรียกใช้ชุดทดสอบและใช้ CMake เพื่อสร้าง Linux makefiles สำหรับ Travis-CI ด้วยวิธีนี้ไม่เพียง แต่ฉันสามารถแสดงให้เห็นว่าฉันเข้าใจวิธีใช้ Git, CMake, Travis-CI และวิธีการเขียนการทดสอบ แต่ฉันยังสามารถเชื่อมโยงไปยังหน้า Travis-CI เพื่อให้พวกเขาสามารถเห็นผลลัพธ์ของการทดสอบ ฉันคิดว่าจะทำให้สะดวกขึ้นเล็กน้อยสำหรับผู้สัมภาษณ์ เนื่องจากฉันรู้ว่าเทคโนโลยีเหล่านั้นดีมันจะเพิ่มเวลาในการมอบหมาย อย่างไรก็ตามฉันกังวลเล็กน้อยว่าการทำสิ่งนี้ให้เป็นงานที่ค่อนข้างง่ายจะดูไม่ดี แม้ว่ามันจะไม่เพิ่มเวลามากขึ้นสำหรับฉัน แต่ฉันไม่ต้องการให้พวกเขาคิดว่าฉันใช้เวลามากเกินไปกับสิ่งที่ควรจะเรียบง่าย

6
อัตราส่วน "บรรทัดการทำงานของโค้ด" ปกติต่อ "การทดสอบบรรทัดของโค้ด" คืออะไร
ฉันค่อนข้างใหม่สำหรับวิธีการ TDD และการทดลองครั้งแรกของฉันบอกว่าการเขียนโค้ดฟังก์ชัน 1 บรรทัดหมายถึงการเขียนโค้ดทดสอบประมาณ 2-3 บรรทัด ดังนั้นในกรณีที่ฉันจะเขียน 1,000 LOC, codebase ทั้งหมดรวมถึงการทดสอบจะเป็นอะไรที่เหมือน ~ 3500 LOC นี่ถือว่าเป็นเรื่องปกติหรือไม่ อัตราส่วนในโค้ดที่คุณเขียนคือเท่าใด

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

5
วิธีที่ดีที่สุดในการสร้างโรงงานโดยใช้ NInject คืออะไร
ฉันค่อนข้างสบายใจกับการฉีดแบบพึ่งพาโดยใช้ NInject ใน MVC3 ในขณะที่ทำงานในแอปพลิเคชัน MVC3 ฉันได้พัฒนา Factory Creation Factory แบบกำหนดเองโดยใช้ NInject ดังนั้นคอนโทรลเลอร์ใด ๆ ที่สร้างขึ้นจะมีการขึ้นต่อกันของมันผ่านทาง Factory Controller นี้ ตอนนี้ฉันเริ่มพัฒนาแอพพลิเคชัน windows ฉันต้องการใช้ Application Wide Dependency Injection เช่นวัตถุทุกชิ้นจะต้องสร้างผ่าน NInject เพื่อให้ง่ายต่อการทดสอบหน่วย โปรดแนะนำฉันเพื่อให้แน่ใจว่าวัตถุทุกชิ้นที่สร้างขึ้นต้องเป็นโรงงาน NInject เท่านั้น ตัวอย่างเช่นถ้าในหน้าต่างใด ๆ ในรูปแบบButton_Clickเหตุการณ์ฉันเขียน: TestClass testClass = new TestClass() และTestClassมีการพึ่งพาพูดพูดITestแล้วมันจะต้องได้รับการแก้ไขโดยอัตโนมัติ ฉันรู้ว่าฉันสามารถใช้: Ikernel kernel = new StandardKenel() //AddBinding() TestClass testClass = …

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

5
ฉันต้องการเริ่มใช้ TDD มีเคล็ดลับสำหรับผู้เริ่มต้นไหม? [ปิด]
ฉันไม่เคยใช้กลไกทดสอบอัตโนมัติในโครงการใด ๆ ของฉันและฉันรู้สึกว่าขาดอะไรมากมาย ฉันต้องการปรับปรุงตัวเองดังนั้นฉันจึงต้องเริ่มแก้ไขปัญหาบางอย่างที่ฉันละเลยไปเช่นนี้และลองใช้ Git แทนที่จะติดอยู่ที่ SVN เป็นวิธีที่ดีในการเรียนรู้ TDD อะไร ฉันอาจจะใช้ Eclipse เพื่อเขียนโปรแกรมใน Java ฉันเคยได้ยิน JUnit แล้ว แต่ฉันไม่รู้ว่าควรพิจารณาเรื่องอื่นอีกไหม

6
คุณใช้เวลาเท่าไหร่ในการทดสอบหน่วย
ใน บริษัท ที่ฉันเคยทำงานให้ผู้บริหารยืนยันว่าการครอบคลุมโค้ดด้วยการทดสอบหน่วยต้องเป็น 99% หรือมากกว่า ส่งผลให้มีการเขียนการทดสอบมากกว่าโค้ด เราใช้เวลา 3 วันในการเขียนแบบทดสอบสำหรับชั้นเรียนเดียวที่ต้องใช้เวลาทั้งวัน อย่างไรก็ตามฉันได้เรียนรู้เกี่ยวกับ TDD เครื่องมือทดสอบแนวปฏิบัติและอื่น ๆ มากมาย ใน บริษัท ที่ฉันทำงานหลังจากนั้นการทดสอบหน่วยเป็นสิ่งที่ไม่รู้จัก มันเป็นสิ่งที่บางคนอาจเคยได้ยินมาก่อน ฉันพยายามที่จะแนะนำให้รู้จักกับแนวคิดของการทดสอบหน่วย แต่ไม่มีผล ตอนนี้เป็นของตนเองผมสงสัย - วิธีการมากเวลามันจำเป็นที่จะต้องใช้จ่ายในการทดสอบหน่วย? การพัฒนาส่วนใหญ่เป็น iPhone / Android ส่วนใดของรหัสที่ควรครอบคลุมในการทดสอบ

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

5
คุณต้องการให้สิ่งส่วนตัวภายใน / สาธารณะสำหรับการทดสอบหรือใช้การแฮ็คบางอย่างเช่น PrivateObject หรือไม่
ฉันค่อนข้างเริ่มต้นในการทดสอบโค้ดและเป็นassertโสเภณีก่อนหน้านี้ สิ่งหนึ่งที่ทำให้ฉันกังวลในการทดสอบหน่วยคือบ่อยครั้งที่คุณต้องสร้างฟิลด์public(หรืออย่างน้อยinternal) ที่จะเป็นprivateอย่างอื่นเพื่อยกเลิกการreadonlyสร้างprivateวิธีการprotected virtualแทน ฯลฯ ฉันเพิ่งค้นพบว่าคุณสามารถหลีกเลี่ยงสิ่งนี้ได้โดยใช้สิ่งต่าง ๆ เช่นคลาสPrivateObjectเพื่อทำเครื่องหมายสิ่งต่าง ๆ ในวัตถุผ่านการสะท้อนกลับ แต่สิ่งนี้ทำให้การทดสอบของคุณบำรุงรักษาได้น้อยลง (สิ่งต่าง ๆ จะล้มเหลวในการดำเนินการมากกว่าการรวบรวมเวลามันจะถูกทำลายโดยการเปลี่ยนชื่อแบบง่ายยากที่จะทำการดีบั๊ก ... ) คุณมีความคิดเห็นอย่างไรกับเรื่องนี้? แนวปฏิบัติที่ดีที่สุดในการทดสอบหน่วยเกี่ยวกับการ จำกัด การเข้าถึงคืออะไร แก้ไข: พิจารณาอินสแตนซ์ที่คุณมีคลาสที่มีแคชในไฟล์บนดิสก์และในการทดสอบของคุณคุณต้องการเขียนไปยังหน่วยความจำแทน
26 c#  unit-testing 

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

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

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

8
ฉันจะทดสอบเว็บไซต์ฟอร์มเว็บไซต์ได้อย่างไร
ฉันจะทดสอบเว็บไซต์ฟอร์มเว็บไซต์ได้อย่างไร สำหรับฉันแล้วดูเหมือนว่ามันมากขึ้นอยู่กับสถานะและการป้อนข้อมูลของผู้ใช้มันจะไม่เป็นไปได้ หากไม่เป็นไปได้มีทางเลือกอัตโนมัติที่ถูกต้องหรือไม่

8
หน่วยทดสอบหลายเงื่อนไขในคำสั่ง IF
ฉันมีโค้ดที่ดูเหมือนอะไรเช่นนี้: function bool PassesBusinessRules() { bool meetsBusinessRules = false; if (PassesBusinessRule1 && PassesBusinessRule2 && PassesBusinessRule3) { meetsBusinessRules= true; } return meetsBusinessRules; } ฉันเชื่อว่าควรมีการทดสอบสี่หน่วยสำหรับฟังก์ชั่นนี้โดยเฉพาะ สามเพื่อทดสอบแต่ละเงื่อนไขในคำสั่ง if และตรวจสอบให้แน่ใจว่ามันคืนเท็จ และการทดสอบอีกอย่างหนึ่งที่ทำให้แน่ใจว่าฟังก์ชันนั้นคืนค่าจริง คำถาม:จริง ๆ แล้วควรมีการทดสอบสิบหน่วยแทนหรือไม่ เก้าที่ตรวจสอบแต่ละเส้นทางของความล้มเหลวที่เป็นไปได้ IE: เท็จเท็จเท็จ เท็จเท็จจริง เท็จจริงเท็จ และอื่น ๆ สำหรับแต่ละชุดค่าผสมที่เป็นไปได้ ฉันคิดว่ามันเกินความจริง แต่สมาชิกคนอื่น ๆ ในทีมของฉันทำไม่ได้ วิธีที่ฉันดูคือถ้า BusinessRule1 ล้มเหลวก็ควรกลับเท็จเสมอมันไม่สำคัญว่ามันจะถูกตรวจสอบครั้งแรกหรือครั้งสุดท้าย

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