การจำลองการพึ่งพาด้วย PHPUnit
สร้างออบเจ็กต์จำลองเพื่อแยกหน่วยที่ทดสอบและควบคุมพฤติกรรมของส่วนประกอบที่ทำงานร่วมกัน
การจำลองการพึ่งพาด้วย PHPUnit เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงใช้วัตถุจำลอง
การจำลองจะแทนที่สิ่งที่ต้องพึ่งพาจริง (ฐานข้อมูล บริการอีเมล ไคลเอ็นต์ HTTP) ด้วยวัตถุปลอมที่ควบคุมได้ ทำให้การทดสอบรวดเร็ว แยกจากกัน และให้ผลลัพธ์แน่นอน
createMock()
createMock(ClassName::class) จะสร้างวัตถุจำลองที่ใช้งานเมธอดทั้งหมดของคลาสได้ และคืนค่า null เป็นค่าเริ่มต้น
<?php
$mailer = $this->createMock(Mailer::class);
// All methods return null by defaultการคาดหวังการเรียกใช้เมธอด
ใช้ expects() ร่วมกับตัวจับคู่ เช่น once(), exactly(3), never(), any() เพื่อตรวจสอบว่าเมธอดถูกเรียกในจำนวนครั้งที่ถูกต้อง
<?php
$mailer->expects($this->once())
->method("send")
->with("user@example.com", "Welcome!");การกำหนดค่าที่คืนกลับ
ใช้ willReturn() เพื่อกำหนดให้เมธอดจำลองคืนค่าเฉพาะที่ต้องการ
<?php
$repo = $this->createMock(UserRepository::class);
$repo->method("find")
->willReturn(new User(id: 1, name: "Alice"));willReturnMap()
คืนค่าที่แตกต่างกันตามอาร์กิวเมนต์โดยใช้ willReturnMap()
<?php
$cache->method("get")
->willReturnMap([
["key:1", "value-one"],
["key:2", "value-two"],
]);willThrowException()
ทำให้วัตถุจำลองโยนข้อยกเว้น เพื่อทดสอบเส้นทางการจัดการข้อผิดพลาด
<?php
$repo->method("find")
->willThrowException(new DatabaseException("Connection lost"));ตัวจับคู่อาร์กิวเมนต์
ใช้ตัวจับคู่อาร์กิวเมนต์ใน with() เพื่อสร้างการยืนยันที่ยืดหยุ่น: $this->anything(), $this->equalTo(), $this->isInstanceOf()
<?php
$logger->expects($this->once())
->method("log")
->with($this->stringContains("error"));วัตถุจำลองบางส่วน (getMockBuilder)
ใช้ getMockBuilder() ร่วมกับ onlyMethods() เพื่อจำลองเฉพาะเมธอดที่ต้องการ ขณะที่ยังคงใช้การนำไปใช้งานจริงสำหรับเมธอดอื่น
<?php
$svc = $this->getMockBuilder(EmailService::class)
->onlyMethods(["sendRaw"])
->getMock();
$svc->method("sendRaw")->willReturn(true);รูปแบบตัวติดตาม
ตัวติดตามจะบันทึกการเรียกใช้ทั้งหมด เพื่อให้คุณตรวจสอบภายหลังการทำงานได้ วัตถุจำลองของ PHPUnit สามารถทำหน้าที่เป็นตัวติดตามได้โดยใช้ any() และบันทึกอาร์กิวเมนต์ไว้
การฉีดวัตถุจำลอง
ส่งวัตถุจำลองเข้าไปในคลาสที่กำลังทดสอบผ่านการฉีดเข้าในตัวสร้าง ซึ่งเป็นรูปแบบมาตรฐานสำหรับโค้ดที่ทดสอบได้และแยกส่วนอย่างเหมาะสม
<?php
$service = new NotificationService($mailer, $logger);
$service->notify($user);วัตถุจำลองของอินเทอร์เฟซเทียบกับคลาสรูปธรรม
ควรเลือกจำลองอินเทอร์เฟซ เพราะรายละเอียดการนำไปใช้งานจะไม่รั่วไหลเข้าสู่การทดสอบ และการทดสอบยังคงใช้ได้แม้การนำไปใช้งานจริงจะเปลี่ยนแปลง
สรุป
ใช้ createMock() เพื่อแยกสิ่งที่ต้องพึ่งพาออกจากการทดสอบ ใช้ expects()->method()->with()->willReturn() เพื่อกำหนดความคาดหวังและค่าจำลอง และฉีดวัตถุจำลองผ่านตัวสร้าง
ตรวจสอบความเข้าใจ
เมธอดใดทำให้วัตถุจำลองคืนค่าเฉพาะที่กำหนด
คำถามที่พบบ่อย
บทเรียน “การจำลองการพึ่งพาด้วย PHPUnit” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การจำลองการพึ่งพาด้วย PHPUnit” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจำลองการพึ่งพาด้วย PHPUnit”
สร้างออบเจ็กต์จำลองเพื่อแยกหน่วยที่ทดสอบและควบคุมพฤติกรรมของส่วนประกอบที่ทำงานร่วมกัน คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การจำลองการพึ่งพาด้วย PHPUnit” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่า PHPUnit และการทดสอบแรก
- การยืนยันผลและเมธอดการทดสอบ
- ผู้จัดหาข้อมูลสำหรับการทดสอบแบบกำหนดพารามิเตอร์
- การจำลองการพึ่งพาด้วย PHPUnit