Hướng dẫn phpunit test database - cơ sở dữ liệu kiểm tra phpunit

Chào cả nhà.

Mình đang tìm hiểu phpunit, hiện tại mình đang dùng laravel 5.4 và có follow theo hướng dẫn test database tại document chính thức của laravel: https://laravel.com/docs/5.4/database-testing#using-migrations

Mình muốn thực hiện test các file models (sẽ tương tác trực tiếp với database: select, insert, update, delete) theo tài liệu của laravel hướng dẫn thì chỉ cần

use DatabaseMigrations;

là nó sẽ tự chạy

$this->beforeApplicationDestroyed(function () {
            $this->artisan('migrate:rollback');
        });
0 và
$this->beforeApplicationDestroyed(function () {
            $this->artisan('migrate:rollback');
        });
1 khi chạy test

Vấn đề mình gặp phải là:

trong 1 Class test của mình có 4 function test chẳng hạn thì khi mình gõ lệnh

$this->beforeApplicationDestroyed(function () {
            $this->artisan('migrate:rollback');
        });
2 mỗi lần hàm
$this->beforeApplicationDestroyed(function () {
            $this->artisan('migrate:rollback');
        });
3 được gọi là
$this->beforeApplicationDestroyed(function () {
            $this->artisan('migrate:rollback');
        });
4 được gọi và sau khi chạy 1 test function nó lại gọi tới
$this->beforeApplicationDestroyed(function () {
            $this->artisan('migrate:rollback');
        });
5

$this->beforeApplicationDestroyed(function () {
            $this->artisan('migrate:rollback');
        });

như vậy là để test được class có 4 function test tôi mà nó gọi tổng cộng là 4 lần

$this->beforeApplicationDestroyed(function () {
            $this->artisan('migrate:rollback');
        });
4 và 4 lần
$this->beforeApplicationDestroyed(function () {
            $this->artisan('migrate:rollback');
        });
5 ==> tốn quá nhiều thời gian và tài nguyên trong quá trình chạy test

Mọi người có mình hỏi: có cách nào chỉ cho hàm

$this->beforeApplicationDestroyed(function () {
            $this->artisan('migrate:rollback');
        });
4 được gọi khi quá trình test bắt đầu và hàm
$this->beforeApplicationDestroyed(function () {
            $this->artisan('migrate:rollback');
        });
5 được gọi khi quá trình test đã hoàn tất hoặc stop.

File cấu hình PhpUnit là file

$ wget https://phar.phpunit.de/phpunit.phar
$ chmod +x phpunit.phar
$ sudo mv phpunit.phar /usr/local/bin/phpunit
3 được đặt ngay trong thư mục gốc của project.

Các file test sẽ được đặt trong thư mục $ wget https://phar.phpunit.de/phpunit.phar $ chmod +x phpunit.phar $ sudo mv phpunit.phar /usr/local/bin/phpunit 4.

Để chạy các test thì ta sử dụng câu lệnh terminal

$ wget https://phar.phpunit.de/phpunit.phar
$ chmod +x phpunit.phar
$ sudo mv phpunit.phar /usr/local/bin/phpunit
5.

  • Muốn xóa cache cấu hình cũ để cấu hình lại file
    $ wget https://phar.phpunit.de/phpunit.phar
    $ chmod +x phpunit.phar
    $ sudo mv phpunit.phar /usr/local/bin/phpunit
    
    3 ta dùng lệnh:
    $ wget https://phar.phpunit.de/phpunit.phar
    $ chmod +x phpunit.phar
    $ sudo mv phpunit.phar /usr/local/bin/phpunit
    
    7
  • Tạo test
  • Sử dụng câu lệnh:

Một file test được tạo ra với nội dung như sau:

Giới thiệu

Đây là một công cụ để chạy unit test trong php được phát triển bởi Sebastian Bergmann. Nó cung cấp một bộ các tính năng vượt trội để giúp việc kiểm thử trở nên dễ dàng.

Cài đặt

  • Cài PhpUnit lên ubuntu
  • Để cài đặt PhpUnit ta chạy các câu lệnh terminal sau:

Kiểm tra đã cài thành công hay chưa:

Đặc điểm của UT

UT có các đặc điểm sau:

  • Đóng vai trò như những người sử dụng đầu tiên của hệ thống.
  • Chỉ có giá trị khi chúng có thể phát hiện các vấn đề tiềm ẩn hoặc lỗi kỹ thuật.

Vòng đời của UT

UT có 3 trạng thái cơ bản:

  • Fail (trạng thái lỗi)
  • Ignore (tạm ngừng thực hiện)
  • Pass (trạng thái làm việc)

Toàn bộ UT được vận hành trong một hệ thống tách biệt. Có rất nhiều PM hỗ trợ thực thi UT với giao diện trực quan. Thông thường, trạng thái của UT được biểu hiện bằng các màu khác nhau: màu xanh (pass), màu vàng (ignore) và màu đỏ (fail).

UT chỉ thực sự đem lại hiệu quả khi:

  • Được vận hành lặp lại nhiều lần
  • Tự động hoàn toàn
  • Độc lập với các UT khác.

Thiết kế UT

Mỗi UT đều được tiết kế theo trình tự sau:

  • Thiết lập các điều kiện cần thiết: khởi tạo các đối tượng, xác định tài nguyên cần thiết, xây dựng các dữ liệu giả...
  • Triệu gọi các phương thức cần kiểm tra.
  • Kiểm tra sự hoạt động đúng đắn của các phương thức.
  • Dọn dẹp tài nguyên sau khi kết thúc kiểm tra.

Ứng dụng của UT

  • Kiểm tra mọi đơn vị nhỏ nhất là các thuộc tính, sự kiện, thủ tục và hàm.
  • Kiểm tra các trạng thái và ràng buộc của đối tượng ở các mức sâu hơn mà thông thường chúng ta không thể truy cập được.
  • Kiểm tra các quy trình (process) và mở rộng hơn là các khung làm việc(workflow - tập hợp của nhiều quy trình).

Lợi ích của UT

Thời gian đầu, người ta thường do dự khi phải viết UT thay vì tập trung vào viết mã cho các chức năng nghiệp vụ. Công việc viết UT có thể ngốn nhiều thời gian, tuy nhiên UT đem lại lợi ích to lớn như:

  • Tạo ra môi trường lý tưởng để kiểm tra bất kỳ đoạn mã nào, có khả năng thăm dò và phát hiện lỗi chính xác, duy trì sự ổn định của toàn bộ PM và giúp tiết kiệm thời gian so với công việc gỡ rối truyền thống.
  • Phát hiện các thuật toán thực thi không hiệu quả, các thủ tục chạy vượt quá giới hạn thời gian.
  • Phát hiện các vấn đề về thiết kế, xử lý hệ thống, thậm chí các mô hình thiết kế.
  • Phát hiện các lỗi nghiêm trọng có thể xảy ra trong những tình huống rất hẹp.
  • Tạo hàng rào an toàn cho các khối mã: Bất kỳ sự thay đổi nào cũng có thể tác động đến hàng rào này và thông báo những nguy hiểm tiềm tàng.

UT tạo thành hàng rào an toàn cho mã ứng dụng. UT là môi trường lý tưởng để tiếp cận các thư viện API bên ngoài một cách tốt nhất. Sẽ rất nguy hiểm nếu chúng ta ứng dụng ngay các thư viện này mà không kiểm tra kỹ lưỡng công dụng của các thủ tục trong thư viện. Dành ra thời gian viết UT kiểm tra từng thủ tục là phương pháp tốt nhất để khẳng định sự hiểu đúng đắn về cách sử dụng thư viện đó. Ngoài ra, UT cũng được sử dụng để phát hiện sự khác biệt giữa phiên bản mới và phiên bản cũ của cùng một thư viện.

Trong môi trường làm việc cạnh tranh, UT còn có tác dụng rất lớn đến năng suất làm việc:

  • Giải phóng chuyên viên QA khỏi các công việc kiểm tra phức tạp.
  • Tăng sự tự tin khi hoàn thành một công việc. Chúng ta thường có cảm giác không chắc chắn về các đoạn mã của mình như liệu các lỗi có quay lại không, hoạt động của module hiện hành có bị tác động không, hoặc liệu công việc hiệu chỉnh mã có gây hư hỏng đâu đó...
  • Là công cụ đánh giá năng lực của bạn. Số lượng các tình huống kiểm tra (test case) chuyển trạng thái "pass" sẽ thể hiện tốc độ làm việc, năng suất của bạn.

2. Phpunit

Giới thiệu

Đây là một công cụ để chạy unit test trong php được phát triển bởi Sebastian Bergmann. Nó cung cấp một bộ các tính năng vượt trội để giúp việc kiểm thử trở nên dễ dàng.

Cài đặt

Cài PhpUnit lên ubuntu

Để cài đặt PhpUnit ta chạy các câu lệnh terminal sau:

$ wget https://phar.phpunit.de/phpunit.phar
$ chmod +x phpunit.phar
$ sudo mv phpunit.phar /usr/local/bin/phpunit

Kiểm tra đã cài thành công hay chưa:

$ phpunit --version

Nếu kết quả hiện ra như sau thì bạn đã cài thành công.

PHPUnit 5.7.5 by Sebastian Bergmann and contributors.

Dùng Composer cài phpunit lên project

Thêm phpunit vào file

$ wget https://phar.phpunit.de/phpunit.phar
$ chmod +x phpunit.phar
$ sudo mv phpunit.phar /usr/local/bin/phpunit
0

{
    "require-dev": {
        "phpunit/phpunit": "5.5.*"
    }
}

sau đó chạy

$ wget https://phar.phpunit.de/phpunit.phar
$ chmod +x phpunit.phar
$ sudo mv phpunit.phar /usr/local/bin/phpunit
1

Hoặc chạy câu lệnh

$ wget https://phar.phpunit.de/phpunit.phar
$ chmod +x phpunit.phar
$ sudo mv phpunit.phar /usr/local/bin/phpunit
2:

composer global require "phpunit/phpunit=5.5.*"

3. Sử dụng Phpunit trong laravel

Giới thiệu

Đây là một công cụ để chạy unit test trong php được phát triển bởi Sebastian Bergmann. Nó cung cấp một bộ các tính năng vượt trội để giúp việc kiểm thử trở nên dễ dàng.

  • Cài đặt
  • Cài PhpUnit lên ubuntu
  • Để cài đặt PhpUnit ta chạy các câu lệnh terminal sau:
  • Kiểm tra đã cài thành công hay chưa:

Nếu kết quả hiện ra như sau thì bạn đã cài thành công.

Dùng Composer cài phpunit lên project

$ php artisan make:test LoginTest

Thêm phpunit vào file

$ wget https://phar.phpunit.de/phpunit.phar
$ chmod +x phpunit.phar
$ sudo mv phpunit.phar /usr/local/bin/phpunit
0

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class LoginTest extends TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testExample()
    {
        $this->assertTrue(true);
    }
}

sau đó chạy

$ wget https://phar.phpunit.de/phpunit.phar
$ chmod +x phpunit.phar
$ sudo mv phpunit.phar /usr/local/bin/phpunit
1

  • Hoặc chạy câu lệnh
    $ wget https://phar.phpunit.de/phpunit.phar
    $ chmod +x phpunit.phar
    $ sudo mv phpunit.phar /usr/local/bin/phpunit
    
    2:
  • 3. Sử dụng Phpunit trong laravel
/**
 * Sử dụng annotation @test
 * @test
 * @return void
 */
public function testExample()
{
    $this->assertTrue(true);
}

Trong laravel, PhpUnit được cài đặt sẵn do vậy không cần thao tác cài thêm phpunit trong project.

  • http://www.pcworld.com.vn/articles/cong-nghe/cong-nghe/2005/12/1188434/unit-test-voi-phat-trien-phan-mem-hien-dai/