Câu trả lời ngắn gọn là Đọc mục Hướng dẫn sử dụng tốt về kiểm tra cơ sở dữ liệu tại hướng dẫn sử dụng PHPUnit .
Và bây giờ là câu trả lời dài ...
Điều đầu tiên cần nhớ về kiểm thử đơn vị là nó cần được thực hiện trong cách ly từ tất cả các thành phần khác. Thông thường, mục tiêu này được đơn giản hóa bằng cách sử dụng các kỹ thuật đảo ngược kiểm soát (IoC) như chèn phụ thuộc . Khi các lớp của bạn yêu cầu rõ ràng sự phụ thuộc của chúng trong các phương thức khởi tạo, thì một thao tác đơn giản là giả lập những phụ thuộc đó để bạn có thể kiểm tra mã còn lại một cách riêng biệt.
Tuy nhiên, mã thử nghiệm tương tác với các mô hình hơi khác một chút. Thông thường, không thực tế hoặc không nên đưa các mô hình của bạn vào lớp mà bạn cần truy cập chúng. Các mô hình của bạn nói chung là cấu trúc dữ liệu "ngu ngốc" thể hiện các khả năng hạn chế hoặc không có. Do đó, nói chung có thể chấp nhận được (về khả năng kiểm tra) để khởi tạo các mô hình của bạn một cách nhanh chóng bên trong các lớp được tiêm khác của bạn. Thật không may, điều này làm cho việc kiểm tra mã cơ sở dữ liệu trở nên khó khăn vì, như tài liệu PHPUnit lưu ý:
Vậy làm cách nào để cô lập và kiểm tra mã tương tác với cơ sở dữ liệu nếu các mô hình không được đưa vào trực tiếp? Cách đơn giản nhất để thực hiện việc này là sử dụng đồ đạc thử nghiệm .
Vì bạn chắc chắn đã sử dụng PDO
hoặc thư viện ORM xây dựng trên PDO
(phải không?), việc thiết lập các đồ đạc cũng đơn giản như gieo một cơ sở dữ liệu SQLite cơ bản hoặc tệp XML với dữ liệu để chứa các trường hợp thử nghiệm của bạn và sử dụng kết nối cơ sở dữ liệu đặc biệt đó khi bạn kiểm tra mã tương tác với cơ sở dữ liệu. Bạn có thể chỉ định kết nối này trong tệp khởi động PHPUnit của mình, nhưng có thể phù hợp hơn về mặt ngữ nghĩa để thiết lập PHPUnit Database TestCase
.
Các bước thực hành tốt nhất được chấp nhận chung để kiểm tra mã DB (các bước này cũng được nhắc lại trong tài liệu PHPUnit về kiểm tra DB):
- Thiết lập lịch thi đấu
- Hệ thống Bài tập Đang Kiểm tra
- Xác minh kết quả
- Teardown
Vì vậy, tóm lại, tất cả những gì bạn cần làm là tạo một bộ cố định cơ sở dữ liệu "giả" và để mã của bạn tương tác với dữ liệu đã biết đó thay vì một cơ sở dữ liệu thực tế mà bạn sẽ sử dụng trong quá trình sản xuất. Phương pháp này cho phép bạn tách biệt thành công mã đang thử nghiệm vì nó xử lý dữ liệu đã biết và điều này có nghĩa là bạn có thể đưa ra các xác nhận cụ thể / có thể kiểm tra được về kết quả của các hoạt động cơ sở dữ liệu của mình.
CẬP NHẬT
Chỉ vì đó là một hướng dẫn cực kỳ hữu ích cho những gì không để làm trong mã của bạn nếu bạn muốn thúc đẩy khả năng kiểm tra, tôi đang thêm một liên kết đến Cách viết mã 3v1L, không thể tin được . Nó không liên quan đến việc kiểm tra cơ sở dữ liệu nói riêng, nhưng nó vẫn hữu ích. Chúc bạn thử nghiệm vui vẻ!
CẬP NHẬT 2
Tôi muốn trả lời nhận xét về việc ngừng thử nghiệm mô hình vì cơ sở mã hiện tại không triển khai PDO
để truy cập cơ sở dữ liệu:
Các mô hình của bạn không phải sử dụng PDO để triển khai tiện ích mở rộng DbUnit của PHPUnit.
Nó sẽ giúp cuộc sống của bạn dễ dàng hơn một chút nếu bạn sử dụng PDO, nhưng bạn không bắt buộc phải làm như vậy. Ví dụ:giả sử bạn đã xây dựng ứng dụng của mình bằng pg_*
tích hợp sẵn của PHP Các hàm PostgreSQL. PHPUnit vẫn cho phép bạn chỉ định các thiết bị cố định và nó vẫn có thể xây dựng lại chúng cho mỗi lần thử nghiệm - bạn chỉ cần trỏ kết nối của mình khi thực hiện các thử nghiệm đến cùng một tài nguyên mà tiện ích mở rộng DbUnit sử dụng cho vật cố định của nó.