MailChimpRecipient라는 MailChimp 목록에서 수신자를 관리하는 클래스를 작성했습니다. 타사 API 래퍼 인 MCAPI 클래스를 사용합니다.
http://apidocs.mailchimp.com/api/1.3/ http://apidocs.mailchimp.com/api/downloads/
MCAPI 객체를 MailChimpRecipient 객체의 생성자로 전달하므로 PHPUnit을 사용하여 자체 클래스의 모든 논리를 테스트하는 단위 테스트를 작성했습니다 (MCAPI 클래스는 테스트하지 않음). 코드 범위가 100 %이며 모든 테스트를 통과했습니다. 이것은 MCAPI 객체를 조롱하고 스터 빙함으로써 수행됩니다.
다음 단계는 PHPUnit을 사용하여 통합 테스트를 작성하는 것입니다. 여기서 실제 MCChim 개체를 사용하여 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
(테스트에 매개 변수로 입력을 제공하는 기능)하십시오.