我编写了一个类,用于管理MailChimp列表上的收件人,称为MailChimpRecipient。它使用MCAPI类,它是第三方API包装器。
http://apidocs.mailchimp.com/api/1.3/ http://apidocs.mailchimp.com/api/downloads/
我将MCAPI对象传递给MailChimpRecipient对象的构造函数,因此我已经使用PHPUnit编写了单元测试,该单元测试可以测试我自己的类中的所有逻辑(我不测试MCAPI类)。我有100%的代码覆盖率,所有测试均通过。这是通过模拟和存根MCAPI对象来完成的。
我的下一步是使用PHPUnit编写集成测试,在该测试中,我将使用真实的MCAPI对象构造MailChimpRecipient固定装置,并设置为使用真实的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对象的情况下,它的行为与所宣传的一样。
它是否正确?这是进行整合测试的最佳方法吗?毕竟,内部组件已经通过单元测试进行了测试。我是否认为集成测试可以根据其行为的宣传方式来测试其是否真正起作用?
为了更进一步,MailChimpRecipient类实现了一个接口,该接口也将由其他类实现。想法是使用工厂将不同类型的邮件列表收件人对象传递给我的代码,尽管使用不同的邮件列表提供程序,但它们都执行相同的操作。由于我的集成测试测试了该接口,因此如何将该接口用于实现该接口的所有类?然后,将来,如果我设计一个可互换使用的新类,则可以在将其插入项目之前运行相同的集成测试。
听起来合理吗?单元测试可以测试对象的内部,集成测试可以确保其行为与广告一样?
setUp
功能来建立运行测试的基础。如果输入未定义,那么您就无法真正测试。输入内容必须准确,严格且始终相同。如果不满足测试的前提条件,请跳过测试。然后分析为什么跳过,以及是否需要添加其他测试和/或未setUp
正确完成。
DataProvider
(该功能将输入作为测试的参数提供)。