0Pricing
PHP Academy · บทเรียน

การจำลองการพึ่งพาด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตั้งค่า PHPUnit และการทดสอบแรก
  2. การยืนยันผลและเมธอดการทดสอบ
  3. ผู้จัดหาข้อมูลสำหรับการทดสอบแบบกำหนดพารามิเตอร์
  4. การจำลองการพึ่งพาด้วย PHPUnit
← กลับไปที่ PHP Academy