Chào mừng bạn đến với phần 3 của loạt bài “PHP Test Driven Development” với chủ đề: Unit Testing.
Ở phần trước, chúng ta đã thiết lập xong PHPUnit. Hãy nhìn lại ExampleTest.php.
<?php namespace Tests\Unit; use PHPUnit\Framework\TestCase; class ExampleTest extends TestCase { public function testBasicTest() { $this->assertTrue(true); } }
Ở đây, chúng ta đang kiểm tra xem có trả về về “true” hay không. Đó là rõ ràng, phải không? Thử nghiệm này thực sự không có ích cho chúng ta. Nó không kiểm tra bất kỳ mã nào của chúng ta. Nó chỉ là một ví dụ khẳng định được đưa ra cho chúng ta bởi Laravel.
Bây giờ, hãy tận dụng câu lệnh assertTrue. Lấy một ví dụ, hãy tạo một lớp có tên Compate.php trong thư mục /app của ứng dụng Laravel mà chúng ta đã tạo ở phần trước. Vì vậy, đường dẫn là /app/Calculate.php. Đây là một lớp đơn giản chỉ cần tính diện tích của hình vuông.
<?php namespace App; class Calculate { public function areaOfSquare($length) { return pow($length, 2); } }
Bây giờ, bạn có thể thoát khỏi tệp exampleTest vì chúng ta không cần nó. Chúng ta sẽ tạo một test mới để kiểm tra lớp Calculate.
Tạo một file mới có tên là TemateTest.php trong thư mục /tests/Unit với mã như sau:
<?php namespace Tests\Unit; use App\Calculate; use PHPUnit\Framework\TestCase; class CalculateTest extends TestCase { public function setUp() { $this->calculate = new Calculate(); } public function test_areaOfSquare_WhenCalledWithLength2_Return4() { $length = 2; $response = $this->calculate->areaOfSquare($length); $this->assertTrue(is_int($response)); $this->assertEquals(4, $response); } }
Được rồi, hãy qua từng dòng lệnh một. Chúng ta sẽ sử dụng lớp App\Calculate bằng cách sử dụng câu lệnh “use”.
Tiếp theo, chúng ta đã khai báo lớp test Calculate Test. Đây là định dạng chuẩn mà chúng ta sẽ sử dụng cho các test của mình – {Name of Class}Test.
Sau đó, chúng ta sử dụng một phương thức có sẵn có tên là setUp, được cung cấp bởi PHPUnit. Phương thức này được gọi mỗi lần bất kỳ testcase nào được chạy trong lớp này và khởi tạo đối tượng calculate.
Cuối cùng là định nghĩa các method test.
Ví dụ: test_areaOfSquare_WhenCalledWithLength2_Return4
Đây là định dạng chuẩn cho cách viết một functione test. {test_function name}, method này tôi đã kiểm tra với dữ liệu đầu vào $lenght = 2 thì sau khi chạy hàm tính chu vi thì kết quả trả về có phải là 4 hay không?
Sau đó, chạy test lần 1.
1 testcase đã được thực hiện và 2 xác nhận (assertTrue và assertEquals) được thành công.
Xin chúc mừng, bạn đã viết bài kiểm tra đơn vị đầu tiên của bạn.
Bây giờ chúng ta muốn thử nghiệm phương pháp tương tự nhiều hơn để đảm bảo rằng nó thực sự đúng như mong muốn. Chúng tôi có thể viết một thử nghiệm khác sao chép mã nhưng thay đổi giá trị đầu vào và giá trị mong đợi. Dưới đây tôi đã thêm một bài kiểm tra khác.
Chúng ta có thể viết một testcase khác bằng cách sao chép mã nhưng thay đổi giá trị đầu vào và giá trị mong đợi. Dưới đây tôi đã thêm một bài kiểm tra khác:
<?php namespace Tests\Unit; use App\Calculate; use PHPUnit\Framework\TestCase; class CalculateTest extends TestCase { public function setUp() { $this->calculate = new Calculate(); } public function test_areaOfSquare_WhenCalledWithLength2_Return4() { $length = 2; $response = $this->calculate->areaOfSquare($length); $this->assertTrue(is_int($response)); $this->assertEquals(4, $response); } public function test_areaOfSquare_WhenCalledWithLength6_Return36() { $length = 6; $response = $this->calculate->areaOfSquare($length); $this->assertTrue(is_int($response)); $this->assertEquals(36, $response); } }
Bây giờ bạn có 2 testcase và 4 assertions pass.
Thêm nhiều testcase cho cùng một phương thức làm cho các bài kiểm thử đáng tin cậy hơn và quan tâm đến các trường hợp khác nhau. Nhưng tất nhiên, các bài kiểm thử phải có ý nghĩa và kiểm thử những điều đúng.
Sau đó, lặp đi lặp lại tạo function test để kiểm thử nhiều các trường hợp khác nhau.
Trong phần tiếp theo của series “PHP Test Driven Development” với chủ đề: Unit Testing, chúng ta sẽ học về mocking. Đây là một lĩnh vực quan trọng khác mà chúng ta sẽ cần trong kiểm thử đơn vị – PHPUnit.
Author: Phan Văn Luân
Đăng ký nhận bộ tài liệu học Java trên 2 trang giấy tại đây
Xem thêm: Java Coding Bootcamp là gì? Tổng quan về Java Coding Bootcamp
0 Lời bình