ฉันได้เขียนคลาสที่จัดการผู้รับในรายการ MailChimp เรียกว่า MailChimpRecipient มันใช้คลาส MCAPI ซึ่งเป็น wrapper API ของบุคคลที่สาม
http://apidocs.mailchimp.com/api/1.3/ http://apidocs.mailchimp.com/api/downloads/
ฉันส่งวัตถุ MCAPI ไปยังตัวสร้างของวัตถุ MailChimpRecipient ดังนั้นฉันจึงได้เขียนการทดสอบหน่วยโดยใช้ PHPUnit ที่ทดสอบตรรกะทั้งหมดในชั้นเรียนของฉันเอง (ฉันไม่ได้ทดสอบคลาส MCAPI) ฉันมีรหัสครอบคลุม 100% และการทดสอบทั้งหมดผ่าน สิ่งนี้ทำได้โดยการล้อเลียนและขัดถูวัตถุ MCAPI
ขั้นตอนต่อไปของฉันคือการเขียนการทดสอบการรวมด้วยการใช้ PHPUnit ที่ฉันจะสร้างการติดตั้ง MailChimpRecipient โดยใช้วัตถุ MCAPI จริงตั้งค่าให้ใช้รายการ MailChimp จริง
ฉันได้เขียนสิ่งที่ฉันคิดว่าเป็นการทดสอบแบบรวมซึ่งโดยทั่วไปแล้วการทดสอบจะทำให้การติดต่อกับวัตถุนั้นเป็นไปอย่างราบรื่น
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));
}
การทดสอบ "บูรณาการ" ไม่ได้เป็นการทดสอบภายในของชั้นเรียน - เพียงตรวจสอบให้แน่ใจว่าได้รับออบเจ็กต์ MCAPI จริงมันทำงานตามที่โฆษณาไว้
ถูกต้องหรือไม่ นี่เป็นวิธีที่ดีที่สุดในการทดสอบการใช้งานหรือไม่? หลังจากทั้งหมด internals ได้รับการทดสอบด้วยการทดสอบหน่วย ฉันคิดถูกหรือไม่ว่าการทดสอบการรวมเข้าด้วยกันนั้นมีไว้เพื่อทดสอบว่าใช้งานได้จริงหรือไม่ตามพฤติกรรมของโฆษณา
หากต้องการใช้ขั้นตอนต่อไปคลาส MailChimpRecipient จะใช้อินเทอร์เฟซซึ่งจะถูกใช้งานโดยคลาสอื่น แนวคิดก็คือการใช้โรงงานเพื่อส่งออบเจ็กต์ผู้รับรายการส่งจดหมายประเภทต่าง ๆ ไปยังรหัสของฉันซึ่งทั้งหมดทำในสิ่งเดียวกัน เนื่องจากการทดสอบการรวมระบบของฉันทดสอบอินเทอร์เฟซนั้นจะใช้กับคลาสทั้งหมดที่ใช้อินเตอร์เฟสได้อย่างไร ในอนาคตถ้าฉันออกแบบคลาสใหม่ที่จะใช้แทนกันได้ฉันสามารถรันการทดสอบการรวมกลุ่มเดียวกันก่อนที่จะแทรกลงในโครงการ
เสียงนี้สมเหตุสมผลหรือไม่ การทดสอบหน่วยทดสอบภายในของวัตถุการทดสอบการรวมกันทำให้แน่ใจว่ามันทำงานตามที่โฆษณาหรือไม่
setUp
ฟังก์ชั่นในการสร้างพื้นที่เพื่อทำการทดสอบ หากอินพุตไม่ได้กำหนดไว้แสดงว่าคุณไม่สามารถทดสอบได้จริงๆ อินพุตจะต้องแม่นยำอย่างเข้มงวดและเหมือนกันทุกครั้ง หากไม่ตรงตามเงื่อนไขของการทดสอบให้ข้ามการทดสอบแทน จากนั้นวิเคราะห์ว่าเหตุใดจึงข้ามและหากคุณต้องการเพิ่มการทดสอบเพิ่มเติมและ / หรือการsetUp
ดำเนินการไม่ถูกต้อง
DataProvider
(นั่นคือฟังก์ชั่นที่ให้อินพุตเป็นพารามิเตอร์สำหรับการทดสอบ)