Table of Contents

1. Cài đặt PHPUnit

$ composer require phpunit/phpunit

2. Cấu trúc thư mục dự án PHPUnit

Cấu trúc thư mục dự án PHPUnit đơn giản:

|- app
|- tests
|- vendor
|- composer.json
|- phpunit.xml

Trong đó:

Nội dung file phpunit.xml:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>
    </testsuites>
    <php>
        <includePath>.</includePath>
        <env name="NOTIFIER_FIREBASE_KEY" value=""/>
        <env name="NOTIFIER_FIREBASE_TO_DEVICE" value=""/>
        <env name="NOTIFIER_FIREBASE_TO_TOPIC" value=""/>
    </php>
</phpunit>

Trong đó:

3. Các quy ước trong PHPUnit

3.1. Cấu trúc thư mục và tên file

Các file test cần được ánh xạ 1-1 với codebase và tên file được thêm chữ Test. Ví dụ:

./app/Foo.php
./app/Bar.php
./app/Controller/Baz.php

Cấu trúc thư mục Test sẽ như sau:

./test/FooTest.php
./test/BarTest.php
./test/Controller/BazTest.php

3.2. Class và phương thức

4. Code mẫu

File ứng dụng:

Calculator.php
<?php
class Calculator
{
 
    public function add($a, $b)
    {
        return $a + $b;
    }
 
}

File test:

CalculatorTest.php
<?php
require 'Calculator.php';
 
class CalculatorTests extends PHPUnit_Framework_TestCase
{
    private $calculator;
 
    protected function setUp()
    {
        $this->calculator = new Calculator();
    }
 
    protected function tearDown()
    {
        $this->calculator = NULL;
    }
 
    public function testTrueIsTrue()
    {
        $foo = true;
        $this->assertTrue($foo);
    }
 
    public function testAdd()
    {
        $result = $this->calculator->add(1, 2);
        $this->assertEquals(3, $result);
    }
 
}

Gọi PHPUnit test:

$ vendor/bin/phpunit 
$ vendor/bin/phpunit tests/FirebaseTest.php
$ vendor/bin/phpunit --filter testSendToTopic tests/FirebaseTest.php 

5. PHPUnit vs Laravel