การเยาะเย้ยการทดสอบหน่วย iOS โดยใช้การเยาะเย้ยอย่างรวดเร็ว

Nov 28 2022
Swift ได้รับการออกแบบมาให้มีความปลอดภัย — รองรับการสะท้อนแบบอ่านอย่างเดียว ดังนั้นจึงไม่มีวิธีแก้ไขโปรแกรมของคุณในขณะรันไทม์

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

ภาษานี้ต้องการฮีโร่ในการเขียนโค้ดที่สามารถทดสอบได้ และเรารู้จักพวกเขาดี — โปรโตคอลและส่วนขยาย! ไม่ว่าจะใช้งานแบบใด — class, enum หรือ struct — จุดประสงค์ของโปรโตคอลยังคงอยู่ — เพื่อกำหนดสิ่งที่เป็นนามธรรมและเพิ่มฟังก์ชันการทำงานใหม่ให้กับประเภท แม้แต่สิ่งที่เราไม่ได้เป็นหนี้

เราสามารถทำอะไรเพื่อเยาะเย้ย?

ใช้การเขียนโปรแกรมเมตาเพื่อสร้างการใช้งานจำลองที่สมบูรณ์

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

ในบทความนี้ ฉันจะให้ภาพรวมเกี่ยวกับวิธีที่เราจะทำการเยาะเย้ยโดยใช้SwiftyMocky

SwiftyMocky

https://github.com/MakeAWishFoundation/SwiftyMocky

ข้อดี

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

ติดตั้ง

  • ติดตั้งโดยใช้ Cocoapods
  • ติดตั้ง CLI เพื่อการสร้างแบบจำลองอย่างง่าย

> แพทย์ที่รวดเร็ว # ตรวจสอบการตั้งค่าของคุณ

> swiftymocky สร้าง # สร้าง mocks

  • การสร้าง Mocks ขึ้นอยู่กับไฟล์ Mockfile.yml ที่มีความเป็นไปได้ที่จะแยกกฎ swift lint โดยใช้excludSwiftLintRules

ในฐานะนักพัฒนา เรามีเครื่องมือไม่มากนักสำหรับล้อเลียน Swift โดยมีขอบเขตที่เข้มงวดเนื่องจากการเข้าถึงรันไทม์ที่จำกัดของภาษา และที่นี่เรามาถึงคำถามที่สำคัญ — ใช้หรือไม่ใช้เฟรมเวิร์กภายนอกเพื่อเยาะเย้ย

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

ขอบคุณสำหรับการอ่าน! หากคุณชอบบทความนี้ โปรดปรบมือ เพื่อให้คนอื่นได้อ่านเช่นกัน :)

มีความสุขในการเขียนโค้ด :v: