Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เขียนการทดสอบที่ซับซ้อนครั้งแรก

รหัสของคุณใดที่ไม่ผ่านการทดสอบ เป็นรหัสที่เกี่ยวข้องกับสถานการณ์ที่ซับซ้อนซึ่งคุณไม่สามารถควบคุมได้หรือไม่ เธรด รันคำสั่ง git เครือข่าย หรือ UI?

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

ทุกครั้งที่คุณแตะโค้ดนั้น คุณจะแตะเบาๆ แทน คุณเหยียบอย่างระมัดระวัง บางทีคุณอาจทำการทดสอบด้วยตนเอง และเมื่อคุณส่งคำขอดึง คุณหวังว่าเพื่อนร่วมทีมของคุณจะไม่ทราบว่าการทดสอบเหล่านั้นไม่มีอยู่จริง

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

เปลี่ยนกรอบความคิดของคุณ

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

แต่ไม่ใช่แค่เกี่ยวกับการทดสอบนี้เท่านั้น เกี่ยวกับการทดสอบในอนาคตทั้งหมดของคุณ .

โค้ดที่ทดสอบดีที่สุดส่วนใหญ่ที่ฉันเคยเห็นได้รับการสนับสนุนมากมาย ไม่ใช่แค่โค้ดใน test/models . โค้ดที่ได้รับการทดสอบเป็นอย่างดีมีการปลอม มีการเยาะเย้ย มีชุดอุปกรณ์ทดสอบที่ดี มีตัวเลือกการกำหนดค่าสำหรับการทดสอบโดยเฉพาะ

สิ่งที่ต้องใช้เวลาในการเขียนและรวบรวม

แต่พอได้กินแล้วรู้สึก ดีมาก คุณสามารถสร้างการทดสอบหลังการทดสอบ รู้สึกสบายใจกับโค้ดของคุณ และมั่นใจได้อย่างรวดเร็วว่าคุณจะย้ายได้หลังจากลงทุนไปแล้ว

คุณสามารถพึ่งพา ในงานที่คุณได้ทำไปแล้ว

จึงไม่เพียงแค่การป้องกันบั๊กในโค้ดที่ซับซ้อนเท่านั้น ยังเป็นการทำให้โค้ดในอนาคตง่ายต่อการทดสอบ ทีละส่วน

ทำให้เป็นการทดสอบการรวมระบบ (สำหรับตอนนี้)

แม้ว่าบางครั้ง มันไม่ได้เกี่ยวกับการเข้าใจคุณค่า – ฉันเข้าใจ แต่ฉันกลับติดขัดเพราะไม่รู้ว่าจะเขียนแบบทดสอบหน่วยกิตสั้นๆ ที่รวดเร็ว

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

ด้วยเวลาเพียงพอ คุณสามารถสร้างของปลอมที่มีคุณภาพเพื่อให้การทดสอบของคุณเชื่อถือได้

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

เพียงแค่เรียกเซิร์ฟเวอร์นั้น เพียงแค่เรียกใช้คำสั่งนั้น ทำไม?

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

คุณอาจไม่ต้องการเก็บการทดสอบเหล่านี้ไว้ตลอดไป:

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

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

รหัสบางรหัสนั้นยากต่อการทดสอบ ต้องใช้เวลาสักครู่ในการสร้างโครงสร้างพื้นฐานที่คุณต้องการเพื่อเขียนการทดสอบที่เชื่อถือได้อย่างรวดเร็ว และหลายครั้งก็ดูไม่คุ้มค่า

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

แม้ว่าบางครั้งจะไม่เพียงพอ จะเกิดอะไรขึ้นถ้าคุณรู้วิธีตรวจสอบให้แน่ใจว่าโค้ดของคุณใช้งานได้จริง แต่ไม่สามารถหาวิธีทดสอบได้

เมื่อสิ่งนั้นเกิดขึ้น ให้หยุดมองว่าการทดสอบเป็นสิ่งที่คุณต้องรักษาให้บริสุทธิ์และโดดเดี่ยว ให้มองว่าเป็นวิธีการทำสิ่งที่คุณทำเองอยู่แล้วโดยอัตโนมัติ

มันไม่สมบูรณ์แบบ และคุณควรเปลี่ยนโดยเร็วที่สุด แต่การทดสอบเหล่านั้นสามารถให้ความมั่นใจแก่คุณในการเขียนและเปลี่ยนโค้ดที่ซับซ้อนได้อย่างรวดเร็ว