Tôi đã viết một lớp quản lý người nhận trong danh sách MailChimp, được gọi là MailChimpRecipient. Nó sử dụng lớp MCAPI, là trình bao bọc API của bên thứ ba.
http://apidocs.mailchimp.com/api/1.3/ http://apidocs.mailchimp.com/api/doads/
Tôi chuyển đối tượng MCAPI vào hàm tạo của đối tượng MailChimpRecipient, vì vậy tôi đã viết các bài kiểm tra đơn vị bằng PHPUnit để kiểm tra tất cả logic trong lớp của riêng tôi (Tôi không kiểm tra lớp MCAPI). Tôi có bảo hiểm mã 100% và tất cả các bài kiểm tra vượt qua. Điều này được thực hiện bằng cách chế nhạo và khai thác đối tượng MCAPI.
Bước tiếp theo của tôi là viết một bài kiểm tra tích hợp, cũng sử dụng PHPUnit, nơi tôi sẽ xây dựng lịch thi đấu MailChimpRecipient bằng một đối tượng MCAPI thực, được thiết lập để sử dụng danh sách MailChimp thực.
Tôi đã viết những gì tôi nghĩ là một bài kiểm tra tích hợp, về cơ bản chạy các bài kiểm tra lại giao diện công khai của đối tượng, như:
public function testAddedRecipientCanBeFound()
{
$emailAddress = 'fred@fredsdomain.com';
$forename = 'Fred';
$surname = 'Smith';
// First, delete the email address if it is already on the list
$oldRecipient = $this->createRecipient();
if($oldRecipient->find($emailAddress))
{
$oldRecipient->delete();
}
unset($oldRecipient);
// Add the recipient using the test data
$newRecipient = $this->createRecipient();
$newRecipient->setForename($forename);
$newRecipient->setSurname($surname);
$newRecipient->setEmailAddress($emailAddress);
$newRecipient->add();
unset($newRecipient);
// Assert that the recipient can be found using the same email address
$this->assertTrue($this->_recipient->find($emailAddress));
}
Bài kiểm tra "tích hợp" không kiểm tra bất kỳ phần bên trong nào của lớp - nó chỉ đảm bảo rằng được cung cấp một đối tượng MCAPI thực sự, nó hoạt động như quảng cáo.
Điều này có đúng không? Đây có phải là cách tốt nhất để chạy thử nghiệm xen kẽ? Rốt cuộc, các phần bên trong đã được kiểm tra với một bài kiểm tra đơn vị. Tôi có đúng không khi nghĩ rằng bài kiểm tra tích hợp có để kiểm tra xem nó có thực sự hoạt động không, theo cách quảng cáo của nó?
Để tiến thêm một bước, lớp MailChimpRecipient thực hiện một giao diện, cũng sẽ được các lớp khác triển khai. Ý tưởng là sử dụng một nhà máy để chuyển các loại đối tượng người nhận danh sách gửi thư khác nhau sang mã của tôi, tất cả đều làm điều tương tự, mặc dù sử dụng các nhà cung cấp danh sách gửi thư khác nhau. Vì các kiểm tra tích hợp của tôi kiểm tra giao diện đó, làm thế nào về việc sử dụng nó cho tất cả các lớp thực hiện giao diện? Sau đó, trong tương lai, nếu tôi thiết kế một lớp mới sẽ được sử dụng thay thế cho nhau, tôi có thể chạy thử nghiệm tích hợp tương tự trước khi chèn nó vào một dự án.
Điều này nghe có vẻ hợp lý? Các bài kiểm tra đơn vị kiểm tra các phần bên trong của một đối tượng, các bài kiểm tra tích hợp có đảm bảo rằng nó hoạt động như quảng cáo?
setUp
chức năng để thiết lập các căn cứ để chạy thử nghiệm của bạn. Nếu đầu vào không được xác định, bạn thực sự không thể kiểm tra. Đầu vào cần phải chính xác, nghiêm ngặt và luôn luôn giống nhau. Nếu điều kiện tiên quyết của một bài kiểm tra không được đáp ứng, thay vào đó hãy bỏ qua bài kiểm tra. Sau đó phân tích lý do tại sao nó bỏ qua và nếu bạn cần thêm các bài kiểm tra bổ sung và / hoặc setUp
không được thực hiện đúng.
DataProvider
(đó là một hàm cung cấp đầu vào làm tham số cho bài kiểm tra).