Trong PHPUnit các kiểm tra như vậy thường được viết bằng cách sử dụng khung kiểm thử đơn vị, khung cho phép mã nguồn của bất kỳ ứng dụng hoặc thư viện nào được kiểm tra dưới dạng các đơn vị chức năng riêng biệt như một lớp hoặc phương thức. PHPUnit giúp bạn tiết kiệm rất nhiều vấn đề đau đầu trong quá trình phát triển, nhưng nó có thể dẫn đến mã dễ bảo trì hơn với hiệu suất tốt hơn, cho phép bạn thực hiện các thay đổi mà không do dự. 

PHPUnit là gì?

phpunit-la-gi

PHPUnit là gì?

PHPUnit là một thư viện độc lập khung để unit testing PHP . Kiểm thử đơn vị là một phương pháp theo đó các đơn vị mã nhỏ được kiểm tra theo kết quả mong đợi.

Thử nghiệm truyền thống kiểm tra toàn bộ một ứng dụng có nghĩa là các thành phần riêng lẻ hiếm khi được thử nghiệm một mình. Điều này có thể dẫn đến các lỗi sẽ không bị phát hiện trong một thời gian dài và khó có thể cô lập nguyên nhân của một lỗi cụ thể trong mã.

Với thử nghiệm đơn vị, chúng tôi kiểm tra từng thành phần của mã riêng lẻ. Tất cả các thành phần có thể được kiểm tra ít nhất một lần. Một ưu điểm chính của phương pháp này là việc phát hiện sớm các lỗi trở nên dễ dàng hơn. Phạm vi nhỏ có nghĩa là dễ dàng theo dõi nguyên nhân gây ra lỗi khi chúng xảy ra.

Lợi ích của PHPUnit testing 

loi-ich-cua-phpunit

Lợi ích của PHPUnit

  • Các bài kiểm tra giúp chúng tôi dễ dàng cấu trúc lại mã hơn. 

Theo thời gian dự án thay đổi. Các thử nghiệm đơn vị cho chúng tôi một số niềm tin rằng các bản cập nhật cho mã sẽ không phá vỡ bất kỳ chức năng hiện có nào đã được kiểm tra kỹ lưỡng trước đây. Chúng tôi có thể cấu trúc lại mã và chạy thử nghiệm để đảm bảo rằng nó vẫn hoạt động như dự định ban đầu.

  • Kiểm thử đơn vị cũng có thể dẫn đến việc gỡ lỗi nhanh hơn 

Vì việc cách ly nguyên nhân gây ra lỗi dễ dàng hơn bằng cách xác định nơi kiểm tra thất bại. Khi các lỗi xuất hiện trong mã của chúng tôi, chúng tôi cũng có thể viết các bài kiểm tra để đảm bảo rằng các vấn đề đã biết này không tái xuất hiện thêm. Tôi nghĩ rằng điểm cuối cùng này đặc biệt quan trọng; Tôi đã thấy nhiều lần trong đó nhiều nhà phát triển làm việc trên một đoạn mã và các lỗi liên tục xuất hiện trở lại do thiếu hiểu biết về tất cả các trường hợp sử dụng của một phương thức. Điều này mang lại cho tôi một lợi ích khác

  • Các thử nghiệm có thể cung cấp tài liệu cho một ứng dụng vì chúng tài liệu sử dụng mã dự kiến. 

Nếu bạn chưa quen với một phần của mã dự án, bạn sẽ có thể xem xét các thử nghiệm có liên quan để xem kết quả mong đợi của chức năng của dự án. 

Một điều mà kiểm thử đơn vị sẽ không làm là xóa tất cả các lỗi từ một ứng dụng. Tuy nhiên, cần giảm chúng và ngăn ngừa sự tái phát của các lỗi đã biết.

TDD

Một lợi ích nữa của thử nghiệm đơn vị có thể được tìm thấy bằng cách mã hóa với phương pháp Phát triển hướng thử nghiệm (Test Driven Development), hoặc TDD . 

Thực hiện phương pháp TDD có thể giúp khuyến khích chúng ta viết mã tốt hơn bằng cách khiến chúng ta suy nghĩ về từng thành phần của mã đang làm gì. Kết quả là chúng ta có thể phát triển mã được xác định rõ ràng với trách nhiệm rõ ràng.

Đã có nhiều nghiên cứu về lợi ích của phương pháp TDD. Phương pháp TDD trong PHPUnit đã được tìm thấy rằng nó có thể làm giảm mật độ lỗi trong mã sản xuất từ 40-80%! Điều đó sẽ khiến bạn dễ dàng viết mã và không tốn thời gian. 

Writing test 

writing-phpunit-testing

Writing PHPUnit test

Mục tiêu là kiểm tra càng nhiều mã càng tốt. Do đó, hãy cố gắng kiểm tra từng đường dẫn có thể thông qua mã của bạn kể cả mã thành công hay thất bại. Theo nguyên tắc thông thường, chúng ta nên có một phương pháp thử nghiệm cho từng kết quả mong đợi của một phương pháp.

Phương pháp thử nghiệm có thể được mô tả như sau:

“testProductCanBeAddedToBasket”

Các lớp kiểm tra sẽ được đặt tên sau khi lớp được kiểm tra. Tên lớp kiểm tra nên kết thúc bằng từ Test và mở rộng “\PHPUnit\Framework\TestCase”

Nếu bạn đang sử dụng một khung công tác, nó có thể có một trình bao bọc cho PHPUnit TestCase. Trong trường hợp đó, bạn có thể sử dụng khung đó để thay thế. Có thể thêm các phương pháp bổ sung để hỗ trợ kiểm tra nên rất đáng sử dụng. Ví dụ, các bài kiểm tra Laravel nên mở rộng là \Tests\TestCase.

Các phương thức kiểm tra muốn được thêm tiền tố test (trừ khi bạn đang sử dụng @testchú thích). Các phương thức này muốn publicvà nên chứa ít nhất một khẳng định. Phương pháp kiểm tra không bao giờ nên phụ thuộc vào nhau; không nên quan trọng nếu testAchạy trước testB, bạn có thể chạy từng cách ly.

<?php

use PHPUnit\Framework\TestCase;

class ExampleTest extends TestCase

{public function setUp()

{// Set up the test class here}

public function testSomething()

{// Write test assertions here}

public function tearDown()

{// Clean up}}

Các phương thức setUptearDown được chạy trước và sau mỗi phương thức kiểm tra tương ứng. Bạn nên sử dụng chúng để thiết lập và dọn dẹp các phương pháp thử nghiệm. Bạn  có thể sử dụng các phương pháp này để chuẩn bị dữ liệu cố định cho các thử nghiệm của mình, điều này được gọi là Fixture .

Khi bạn thấy mình cần kiểm tra dữ liệu từ cơ sở dữ liệu, đây là nơi thích hợp để điền và xóa dữ liệu kiểm tra. Ví dụ: nếu bạn đang sử dụng Laravel, bạn có thể sử dụng Model Factories để chọn cơ sở dữ liệu thử nghiệm trong setUp và đặt lại cơ sở dữ liệu trong tearDown. Hãy nhớ rằng bạn muốn bắt đầu mỗi bài kiểm tra với một bảng xếp hạng sạch sẽ.

Cũng có setUpBeforeClass và tearDownAfterClass, các phương thức chạy trước và sau khi một lớp kiểm tra được chạy, nhưng hãy sử dụng chúng một cách thận trọng.

Cuối cùng, đừng quên Kiểm tra tích hợp

Kiểm thử đơn vị là rất tốt và sẽ giúp bạn giảm số lượng lỗi trong mã của mình, nhưng nó cũng có những hạn chế. Bạn đang kiểm tra các đoạn mã bị cô lập nhỏ với kiểm thử đơn vị. Vì vậy, kiểm thử tích hợp là phương pháp tốt nhất đảm bảo rằng tất cả các thành phần của mã làm việc cùng nhau.

Kết luận 

Viết bài kiểm tra có thể khó, và viết bài kiểm tra tốt có thể còn khó hơn. Khi bắt đầu có vẻ như là một ý tưởng tốt nhưng bạn cần thúc đẩy bản thân để bắt đầu. Trong thời gian ngắn thì bạn không thấy bất kỳ cải tiến lớn nào và điều đó có vẻ như vô nghĩa nhưng sau đó về lâu dài bạn bắt đầu thấy những lợi ích rõ ràng khi dùng nó.

Leave a comment

Your email address will not be published. Required fields are marked *