PHP test tools: SimpleTest or PHPUnit


Trang opensourcetesting.org giới thiệu 9 công cụ hỗ trợ tiến trình Unit Test đối với lập trình PHP gồm có:

  • Amock
  • izh_test
  • PHP Assertion Unit Framework
  • PHPUnit (dựa trên nền tảng JUnit)
  • PHPUnit (trong gói PEAR)
  • Simple Test
  • Spike PHPCheckstyle
  • Spike PHPCoverage
  • Testilence.

Tuy nhiên, căn cứ vào số lượng download, có thể thấy nổi bật lên trong số đó chính là Simple Test (>100k lượt) và PHPUnit (>35k lượt).

Simple Test chủ yếu được phát triển bởi Marcus Barker và một số thành viên khác trong khi đó PHPUnit được phát triển bởi  Sebastian Bermann dựa trên nền tảng của JUnit nên có vẻ phát triển ổn định và được hỗ trợ bởi một cộng đồng lớn hơn so với Simple Test. Điều này thể hiện qua việc việc PHPUnit đã đưa ra phiên bản 4.0 so với phiên bản 1.0.1 của Simple Test.

Vậy chúng ta cần gì ở một PHP test tools:

  • Hỗ trợ mô hình test tăng dần, cho phép tạo các test case trước khi triển khai.
  • Hỗ trợ quá trình test qua browser hoặc command-line.
  • Có thể thực hiện cả việc test độc lập, theo nhóm và các bài test tổng thể
  • Có thể customize phần hiển thị kết quả.
  • Cho phép kiểm tra cấu trúc của lớp.
  • Kiểm tra các biệt lệ và sự kiểm soát biệt lệ.
  • Cung cấp các plug-in để tích hợp với IDE

May thay, cả SimpleTest và PHPUnit đều đáp ứng được hầu hết những yêu cầu đó. Tuy nhiên, mỗi công cụ cũng có những ưu và nhược điểm riêng:

Về phía PHPUnit.

  • Ưu điểm:
    • Được sử dụng và hỗ trợ rộng rãi từ cộng đồng  Zend: Cập nhật thường xuyên, mức độ lỗi ít, tài liệu chi tiết.
    • Có thể tạo nhiều loại report khác nhau.
  • Khuyết điểm:
    • Mock Objects được đưa ra trong phiên bản PHPUnit 3 song vẫn chưa thể sánh bằng SimpleTest
    • Không thực thi trực tiếp từ browser.
    • Ít chức năng hơn Simple Test

Về phía SimpleTest.

  • Ưu điểm:
    • Hỗ trợ Mock Objects mạnh mẽ
    • Hoạt động chung với PHPUnit
    • Có thể thực thi trực tiếp từ browser lẫn command-line.
    • Có thể test cả hành vi lẫn trạng thái của đối tượng.
    • Người dùng  Drupal có thể cài đạt module để sử dụng SimpleTest
  • Khuyết điểm:
    • Phần tài liệu không bằng PHPUnit
    • Cần thêm sự bổ sung mở rộng để dùng chung với Zend Framework

Mock Objects mô phỏng lại các đối tượng thực sự trong ứng dụng, chúng cũng có các phương thức giống như các đối tượng mà nó mô phỏng, chính vì vậy nó thường được tạo ra nhằm kiểm tra tính đúng đắn của một đối tượng phụ thuộc vào đối tượng mà nó mô phỏng.

Như chúng ta đã biết, trong các ứng dụng, một đối tượng thường phụ thuộc vào sự tồn tại của một (hay nhiều) đối tượng khác, chính vì vậy sẽ gây ra trở ngại khi phải thực hiện công đoạn Unit Test (mục đích là cách ly các thành phần của ứng dụng).

Giả sử có class StudentBSO cung cấp các business services cho các đối tượng Student và sử dụng StudentDAO để lưu dữ liệu vào database. Khi muốn test class StudentBSO, chúng ta chỉ cần gọi đối tượng mock object mô phỏng đối tượng StudentDAO, thực hiện triệu gọi các phương thức với các đối số tương ứng (đã được xác định) nhằm đạt được kết quả mong muốn thay vì phải gọi trực tiếp tới đối tượng StudentDAO.

Về mặt tính năng, giữa chúng có nhiều tính năng tương đồng và dễ dàng tích hợp với người dùng Eclipse. Nếu như trước đây người dùng PHPUnit cảm thấy yếu thế hơn khi mà PHPUnit không hỗ trợ Mock Object thì giờ đây, từ phiên bản 3 đã hỗ trợ Mock Object (tuy vẫn còn rất hạn chế) và nhiều tính năng khác như Database Testing… Tuy nhiên, người dùng SimpleTest có thể thực sự thấy quá trình Test thực sự “Simple” bởi những tính năng mà nó đem lại.

Resource:

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s