ให้ทางเลือกอื่นในการทดสอบโค้ดที่ส่งข้อยกเว้นโดยใช้ PHPUnit 10 หรือ 11 ประโยชน์หลักคือการเข้าถึงข้อยกเว้นที่ส่งออกมาสำหรับการตรวจสอบเพิ่มเติม สิ่งนี้อาจเป็นประโยชน์เมื่อคุณต้องการตรวจสอบรายละเอียดของข้อยกเว้นที่ไม่คาดว่าจะมีใน PHPUnit ตัวอย่างด้านล่างทำหน้าที่เป็นการเริ่มต้นอย่างรวดเร็ว สำหรับรายละเอียดเพิ่มเติม โปรดดูคำแนะนำโดยละเอียดด้านล่าง
<?php declare (strict_types= 1 );
use Cspray AssertThrows ThrowableAssert ;
use PHPUnit Framework TestCase ;
final class MyTest extends TestCase {
public function testExceptionPreviousInstanceOf () : void {
$ throwable = ThrowableAssert:: assertThrows (
static fn () => throw new RuntimeException (previous: new BadMethodCallException ())
);
self :: assertInstanceOf (BadMethodCallException::class, $ throwable -> getPrevious ());
}
}
Composer เป็นวิธีเดียวที่รองรับในการติดตั้งแพ็คเกจนี้
composer require --dev cspray/assert-throws
PHPUnit จัดเตรียมวิธีที่เหมาะสมในการทดสอบข้อยกเว้นที่คาดหวังไว้ทันที สำหรับสถานการณ์ส่วนใหญ่ วิธีการของ PHPUnit ควรจะเพียงพอแล้ว อย่างไรก็ตาม มีสถานการณ์ที่คุณอาจต้องทดสอบการโยนโค้ดข้อยกเว้นในลักษณะที่ไม่พร้อมใช้งานใน PHPUnit ตัวอย่างของสิ่งนี้ได้แก่โค้ดที่คุณต้องการทดสอบข้อยกเว้น ก่อนหน้า หรือหากข้อยกเว้นมีข้อมูลเฉพาะโดเมนด้วย ในสถานการณ์เหล่านี้เองที่ห้องสมุดนี้เหมาะสมที่สุด
การยืนยันทั้งหมดที่จัดทำโดยไลบรารีนี้รับสายที่คาดว่าจะส่งข้อยกเว้น หากไม่มีการโยนข้อยกเว้น PHPUnitFrameworkExpectationFailedException
จะถูกส่งออกไปส่งผลให้การทดสอบล้มเหลว มิฉะนั้น ข้อยกเว้นที่ถูกส่งจะถูกส่งกลับเพื่อการยืนยันเพิ่มเติม
วิธีการคงที่ต่อไปนี้มีอยู่ในคลาส CsprayAssertThrowsThrowableAssert
:
<?php
use Cspray AssertThrows ThrowableAssert ;
$ throwable = ThrowableAssert:: assertThrows ( static fn () => throw new RuntimeException ());
$ throwable = ThrowableAssert:: assertThrowsExceptionType (
static fn () => throw new BadMethodCallException (),
BadMethodCallException::class
);
$ throwable = ThrowableAssert:: assertThrowsExceptionTypeWithMessage (
static fn () => throw new RuntimeException ( ' My exception message ' ),
RuntimeException::class,
' My exception message '
);
นอกจากคลาส ThrowableAssert
ที่มีวิธีการคงที่แล้ว ยังมีฟังก์ชันส่วนกลางให้เลือกใช้อีกด้วย:
<?php
use function Cspray AssertThrows assertThrows ;
use function Cspray AssertThrows assertThrowsExceptionType ;
use function Cspray AssertThrows assertThrowsExceptionTypeWithMessage ;
$ throwable = assertThrows ( static fn () => throw new RuntimeException ());
$ throwable = assertThrowsExceptionType (
static fn () => throw new BadMethodCallException (),
BadMethodCallException::class
);
$ throwable = assertThrowsExceptionTypeWithMessage (
static fn () => throw new RuntimeException ( ' My exception message ' ),
RuntimeException::class,
' My exception message '
);
เช่นเดียวกับลักษณะที่จะใช้ในการใช้งาน PHPUnitFrameworkTestCase
ของคุณ:
<?php
use Cspray AssertThrows ThrowableAssertTestCaseMethods ;
use PHPUnit Framework TestCase ;
class MyTestCase extends TestCase {
use ThrowableAssertTestCaseMethods;
public function testAssertThrows () : void {
$ throwable = self :: assertThrows ( static fn () => new RuntimeException ());
}
public function testAssertThrowsExceptionType () : void {
$ throwable = self :: assertThrowsExceptionType (
static fn () => throw new BadMethodCallException (),
BadMethodCallException::class
);
}
public function testAssertThrowsExceptionTypeWithMessage () : void {
$ throwable = self :: assertThrowsExceptionTypeWithMessage (
static fn () => throw new RuntimeException ( ' My exception message ' ),
RuntimeException::class,
' My exception message '
);
}
}
วิธีใดที่คุณใช้เป็นความชอบส่วนตัว ท้ายที่สุดแล้ว ตัวอย่างทั้งหมดใช้วิธีการคงที่ที่มีอยู่ในคลาส ThrowableAssert