วิธีทดสอบรหัสรวมใน Swift

May 02 2023
เรียนรู้วิธีที่คุณสามารถทดสอบโค้ด Combine ของคุณโดยใช้ความคาดหวัง
การทดสอบโค้ดของเราเป็นส่วนสำคัญของกระบวนการพัฒนา แต่ถ้าเราใช้กรอบงาน Combine นี่อาจดูไม่เป็นธรรมชาติตั้งแต่แรกเห็น

การทดสอบโค้ดของเราเป็นส่วนสำคัญของกระบวนการพัฒนา

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

มาดูวิธีที่เราสามารถรวมการทดสอบหน่วยในรหัสรวมของเราได้อย่างง่ายดาย

ภาพถ่ายโดย Christina @ wocintechchat.com บน Unsplash

เริ่มต้นด้วยการดูผู้จัดการต่อไปนี้ซึ่งจำลองการจัดการสัญญาณไฟจราจร

จากบทความรวมเริ่มต้นของเรา เรารู้ว่าการเพิ่ม @Published wrapper ทำให้เราได้รับ Publisher ฟรีที่เราสามารถเข้าถึงได้โดยใช้อักขระ $

การทดสอบ

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

  • ขั้นตอนที่ 1: กำหนดสิ่งที่คุณต้องการทดสอบ
  • ขั้นตอนที่ 2: ดำเนินการที่คุณต้องการทดสอบด้วยค่าที่คุณกำหนดไว้ในขั้นตอนที่ 1
  • ขั้นตอนที่ 3: ประเมินผลลัพธ์ที่คุณได้รับจากขั้นตอนที่ 2

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

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

อย่างที่คุณจินตนาการได้ ในการทดสอบฟังก์ชัน เราต้องแน่ใจว่าค่าของคุณสมบัตินั้นมีค่าที่ถูกต้องในตอนท้าย แต่ที่สำคัญที่สุด เราต้องแน่ใจว่าการเปลี่ยนแปลงค่าทั้งหมด (จากค่าหนึ่งไปยังอีกค่าหนึ่ง) นั้นถูกต้อง .

ความคาดหวัง

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

ดังนั้น เพื่อทดสอบฟังก์ชันของเรา เราจะต้องรอจนกว่าเราจะรวบรวมค่าที่คาดหวังทั้งหมดที่เรารู้ว่าcurrentLightคุณสมบัติควรเปลี่ยนแปลง จากนั้นเราจะตอบสนองความคาดหวังหากเรามีค่าทั้งหมด มิฉะนั้น การทดสอบจะล้มเหลวเนื่องจากการหมดเวลา

ด้วยเหตุนี้ เราจึงมีเครื่องมือที่เหมาะสมในการสร้างการทดสอบใหม่สำหรับsimulateFlowฟังก์ชัน ของเรา

มาแจกแจงรหัส:

ขั้นตอนที่ 1

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

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

ตัวอย่างเช่น คุณสามารถใช้หลักการเหล่านี้เพื่อทดสอบสถานะของ ViewModel ในสถาปัตยกรรม MVVM หรือเพื่อทดสอบการเรียกเครือข่ายที่ล้อเลียน

คุณอาจต้องการตรวจสอบบทความก่อนหน้าของฉันเกี่ยวกับ Combine

รู้เบื้องต้นเกี่ยวกับกรอบการรวมใน Swift

https://blorenzop.medium.com/form-validation-with-combine-4988adcc3b0

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

หากคุณต้องการสนับสนุนฉัน คุณสามารถติดตามฉันได้ที่GitHubหรือTwitter