MailChimpRecipient adlı bir MailChimp listesinde alıcıları yöneten bir sınıf yazdım. Üçüncü taraf bir API sarıcı olan MCAPI sınıfını kullanır.
http://apidocs.mailchimp.com/api/1.3/ http://apidocs.mailchimp.com/api/downloads/
MCAPI nesnesini MailChimpRecipient nesnesinin yapıcısına iletiyorum, bu yüzden kendi sınıfımdaki tüm mantığı test eden PHPUnit kullanarak birim testleri yazdım (MCAPI sınıfını test etmiyorum). % 100 kod kapsamına sahibim ve tüm testler başarılı. Bu, MCAPI nesnesini alay ederek ve saplayarak yapılır.
Bir sonraki adımım da gerçek bir MCPI nesnesi kullanarak MailChimpRecipient fikstürünü gerçek bir MailChimp listesi kullanmak üzere ayarlanmış PHPUnit kullanarak bir entegrasyon testi yazmaktı.
Ben temelde testleri nesnenin genel arayüzü agains testleri yürüten bir entegrasyon testi olduğunu düşünüyorum yazdım:
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));
}
"Entegrasyon" testi, sınıfın iç bileşenlerini test etmez; yalnızca gerçek bir MCAPI nesnesi verildiğinde, reklamı yapılan gibi davranmasını sağlar.
Bu doğru mu? Bir ara testi yapmanın en iyi yolu bu mu? Sonuçta, iç üniteler bir birim testi ile test edildi. Entegrasyon testinin, davranışının tanıtıldığı şekilde, gerçekten işe yarayıp yaramadığını test etmek için orada olduğunu düşünmekte haklı mıyım?
Bir adım daha ileri götürmek için MailChimpRecipient sınıfı, diğer sınıflar tarafından da uygulanacak bir arabirim uygular. Fikir, farklı posta listesi sağlayıcıları kullanıyor olsa da, hepsi aynı şeyi yapan farklı posta listesi alıcı nesneleri kodumu iletmek için bir fabrika kullanmaktır. Entegrasyon testlerim bu arayüzü test ettiğinden, arayüzü uygulayan tüm sınıflar için kullanmaya ne dersiniz? Sonra, gelecekte, birbirinin yerine kullanılacak yeni bir sınıf tasarlarsam, aynı entegrasyon testini bir projeye eklemeden önce çalıştırabilirim.
Kulağa makul geliyor mu? Birim testleri bir nesnenin içini test eder, entegrasyon testleri onun reklamı yapılan gibi davrandığından emin olur mu?
setUp
, testlerinizi yürütmek için gerekçe oluşturmak için bu işlevi kullanmalısınız . Giriş tanımsızsa, gerçekten test edemezsiniz. Girdinin kesin, katı ve her zaman aynı olması gerekir. Bir testin ön koşulu karşılanmazsa, bunun yerine testi atlayın. Daha sonra neden atladığını ve ek testler eklemeniz gerekip gerekmediğini ve / veya setUp
doğru yapılmadığını analiz edin .
DataProvider
(bir teste parametre olarak girdi sunan bir işlevdir).