ข้ามไปยังเนื้อหาหลัก
คู่มือระบบ เนื้อหาผ่านการตรวจสอบแล้ว

Assertion คืออะไร: รู้จัก Assertions พื้นฐาน

บทความนี้อธิบายถึงความหมายและความสำคัญของ "Assertion" ใน Unit Testing ซึ่งเป็นคำสั่งที่ใช้ตรวจสอบว่าเงื่อนไขที่คาดหวังเป็นจริงหรือไม่ และเป็นตัวบ่งชี้ว่า Test C...

Assertion คืออะไร: รู้จัก Assertions พื้นฐาน

ในบทที่แล้ว เราได้สร้าง Test Case แรกและใช้งาน assertEquals() เพื่อตรวจสอบผลลัพธ์ของฟังก์ชันที่เราต้องการทดสอบ ในบทนี้ เราจะมาเจาะลึกถึงสิ่งที่เรียกว่า "Assertion" ซึ่งเป็นหัวใจสำคัญของการทำ Unit Testing

Assertion คืออะไร?

Assertion คือคำสั่งที่ใช้ใน Test Case เพื่อตรวจสอบว่าเงื่อนไขที่เราคาดหวังเป็นจริงหรือไม่ พูดง่ายๆ คือ Assertion เป็นตัวบอกว่า Test Case นั้นๆ ผ่าน (Pass) หรือไม่ผ่าน (Fail) หากเงื่อนไขที่ Assertion ตรวจสอบเป็นจริง Test Case ก็จะผ่าน แต่ถ้าไม่จริง Test Case ก็จะ Fail

PHPUnit มี Assertion ให้เลือกใช้มากมาย แต่ในบทนี้เราจะมาทำความรู้จักกับ Assertions พื้นฐานที่ใช้บ่อยกันก่อน

Assertions พื้นฐานที่ควรรู้

1. assertEquals()

assertEquals() เป็น Assertion ที่ใช้ตรวจสอบว่าค่าสองค่าเท่ากันหรือไม่ โดยจะเปรียบเทียบค่าที่คาดหวัง (expected value) กับค่าที่ได้จากการรันโค้ดที่เราทดสอบ (actual value) หากทั้งสองค่าเท่ากัน Test Case จะผ่าน

รูปแบบการใช้งาน:

$this->assertEquals($expected, $actual, $message = '');
  • $expected: ค่าที่คาดหวัง
  • $actual: ค่าที่ได้จากการรันโค้ด
  • $message: (Optional) ข้อความที่จะแสดงเมื่อ Test Case Fail

ตัวอย่าง:

use PHPUnit\Framework\TestCase;

class CalculatorTest extends TestCase
{
    public function testAdd()
    {
        $calculator = new Calculator();
        $result = $calculator->add(2, 3);
        $this->assertEquals(5, $result, '2 + 3 should equal 5');
    }
}

class Calculator {
    public function add(int $a, int $b): int {
        return $a + $b;
    }
}

ในตัวอย่างนี้ เราคาดหวังว่าผลลัพธ์ของการบวก 2 กับ 3 จะเท่ากับ 5 หากผลลัพธ์ไม่เป็นไปตามที่คาดหวัง Test Case จะ Fail และแสดงข้อความ "2 + 3 should equal 5"

2. assertTrue()

assertTrue() ใช้ตรวจสอบว่าค่าที่กำหนดเป็น true หรือไม่ หากค่าเป็น true Test Case จะผ่าน

รูปแบบการใช้งาน:

$this->assertTrue($condition, $message = '');
  • $condition: เงื่อนไขที่ต้องการตรวจสอบ (ต้องเป็น boolean)
  • $message: (Optional) ข้อความที่จะแสดงเมื่อ Test Case Fail

ตัวอย่าง:

use PHPUnit\Framework\TestCase;

class StringTest extends TestCase
{
    public function testIsLongString()
    {
        $string = "This is a long string.";
        $this->assertTrue(strlen($string) > 10, 'String should be longer than 10 characters');
    }
}

ในตัวอย่างนี้ เราตรวจสอบว่าความยาวของ String มากกว่า 10 หรือไม่ หากความยาวมากกว่า 10 Test Case จะผ่าน

3. assertFalse()

assertFalse() ใช้ตรวจสอบว่าค่าที่กำหนดเป็น false หรือไม่ หากค่าเป็น false Test Case จะผ่าน

รูปแบบการใช้งาน:

$this->assertFalse($condition, $message = '');
  • $condition: เงื่อนไขที่ต้องการตรวจสอบ (ต้องเป็น boolean)
  • $message: (Optional) ข้อความที่จะแสดงเมื่อ Test Case Fail

ตัวอย่าง:

use PHPUnit\Framework\TestCase;

class NumberTest extends TestCase
{
    public function testIsNegative()
    {
        $number = 5;
        $this->assertFalse($number < 0, 'Number should not be negative');
    }
}

ในตัวอย่างนี้ เราตรวจสอบว่าตัวเลขเป็นค่าลบหรือไม่ หากไม่ใช่ค่าลบ Test Case จะผ่าน

4. assertNull()

assertNull() ใช้ตรวจสอบว่าค่าที่กำหนดเป็น null หรือไม่ หากค่าเป็น null Test Case จะผ่าน

รูปแบบการใช้งาน:

$this->assertNull($actual, $message = '');
  • $actual: ค่าที่ต้องการตรวจสอบ
  • $message: (Optional) ข้อความที่จะแสดงเมื่อ Test Case Fail

ตัวอย่าง:

use PHPUnit\Framework\TestCase;

class VariableTest extends TestCase
{
    public function testUninitializedVariable()
    {
        $variable = null;
        $this->assertNull($variable, 'Variable should be null');
    }
}

ในตัวอย่างนี้ เราตรวจสอบว่าตัวแปร $variable มีค่าเป็น null หรือไม่

5. assertNotNull()

assertNotNull() ใช้ตรวจสอบว่าค่าที่กำหนดไม่ใช่ null หากค่าไม่ใช่ null Test Case จะผ่าน

รูปแบบการใช้งาน:

$this->assertNotNull($actual, $message = '');
  • $actual: ค่าที่ต้องการตรวจสอบ
  • $message: (Optional) ข้อความที่จะแสดงเมื่อ Test Case Fail

ตัวอย่าง:

use PHPUnit\Framework\TestCase;

class ObjectTest extends TestCase
{
    public function testCreatedObject()
    {
        $object = new stdClass();
        $this->assertNotNull($object, 'Object should not be null');
    }
}

ในตัวอย่างนี้ เราตรวจสอบว่า Object ที่สร้างขึ้นใหม่ไม่ใช่ null

สรุป

Assertion เป็นเครื่องมือที่สำคัญในการทำ Unit Testing ช่วยให้เราตรวจสอบได้ว่าโค้ดของเราทำงานได้ตามที่คาดหวังหรือไม่ การทำความเข้าใจและใช้งาน Assertions พื้นฐานเหล่านี้ได้อย่างคล่องแคล่ว จะช่วยให้เราเขียน Test Case ที่มีประสิทธิภาพและครอบคลุมได้มากยิ่งขึ้น ในบทต่อไป เราจะมาเรียนรู้วิธีการรัน Test Case ที่เราสร้างขึ้นด้วย PHPUnit

Office.in.th Custom Service

ต้องการพัฒนาระบบหรือปรับแต่งจากโครงสร้างนี้?

Office.in.th รับพัฒนาและออกแบบ Enterprise Web Application, API Integration และระบบบริหารงานภาครัฐ/เอกชน พร้อมการสนับสนุนระยะยาว

ดูบริการรับพัฒนาซอฟต์แวร์