지금까지 Array와 내장 함수 sizeof()에 대한 두 가지 테스트만 있었습니다. 많은 수의 array_*() 함수를 테스트하기 시작하면 각 함수에 대한 테스트가 필요합니다. 우리는 처음부터 각각을 쓸 수 있습니다. 그러나 더 나은 접근 방식은 테스트 인프라를 한 번 작성한 다음 각 테스트의 다른 부분만 작성하는 것입니다. PHPUnit은 그러한 인프라입니다.
예제 5에서는 PHPUnit을 사용하여 예제 4의 두 테스트를 다시 작성하는 방법을 보여줍니다.
실시예 5.
PHPUnit을
사용하여 배열 및 sizeof()를 테스트합니다.
require_once 'PHPUnit2/Framework/TestCase.php';
클래스 ArrayTest는 PHPUnit2_Framework_TestCase를 확장합니다.
공개 함수 testNewArrayIsEmpty( ) {
//배열 고정물을 생성합니다.
$fixture = 배열( );
// 배열 고정물의 크기가 0인지 확인합니다.
$this->assertEquals(0, sizeof($fixture));
}
공개 함수 testArrayContainsAnElement() {
//배열 고정물을 생성합니다.
$fixture = Array( );
// 배열 Fixture에 멤버를 추가합니다.
$fixture[] = '요소';
//배열 고정물의 크기가 1인지 확인합니다.
$this->assertEquals(1, sizeof($fixture));
}
}
?>
예제 5에서는 PHPUnit을 사용하여 테스트를 작성하는 기본 단계를 보여줍니다.
1. Class 클래스의 테스트 클래스는 ClassTest입니다.
2. ClassTest는 일반적으로 PHPUnit2_ Framework_TestCase를 상속합니다.
3. Test는 매개변수가 없는 공개 메소드이며 이름은 test*입니다.
4. 테스트 메서드에서는 실제 값이 예상 값과 일치하는지 여부를 확인하기 위해 AssertEquals()(표 6 참조)와 같은 어설션 함수를 사용합니다.
PHPUnit과 같은 프레임워크는 여러 가지 문제를 해결해야 하며 그 중 일부는 서로 충돌하는 것처럼 보입니다. 테스트는 다음 조건도 충족해야 합니다.
배우기 쉬워야 합니다
. 테스트는 배우기 쉬워야 합니다. 그렇지 않으면 개발자가 배울 수 없습니다
.개발이 쉬워야
합니다. 테스트는 개발하기 쉬워야 하며, 그렇지 않으면 개발자가 개발하지 않습니다.
읽기 쉬워야
합니다. 테스트 코드에는 외부 관계가 없어야 합니다. , 테스트 자체가 혼란에 빠지지 않도록 합니다.
실행하기 쉬움
테스트는 실행하기 쉬워야 하며 실행 결과는 명확하고 모호하지 않은 형식으로 표현되어야 합니다.
빠른 실행
테스트는 하루에 수천 번 실행될 수 있도록 빠르게 실행되어야 합니다.
코드 격리
테스트는 서로 영향을 미칠 수 없으며 테스트 순서의 변경은 결과에 영향을 주어서는 안 됩니다.
컴포저블
우리는 어떤 조합으로든 테스트를 실행할 수 있어야 하며 이는 코드 격리의 결과입니다.
이러한 제약 조건 사이에는 두 가지 주요 충돌이 있습니다.
학습 용이성과 개발 용이성
테스트는 일반적으로 프로그래밍의 완전한 유연성을 요구하지 않습니다. 많은 테스트 도구는 자체 테스트 스크립팅 언어를 제공합니다. 이러한 언어에는 테스트 작성에 필요한 최소한의 기능만 있습니다. 테스트 내용을 방해하는 노이즈가 없기 때문에 작성된 테스트는 쉽게 읽고 쓸 수 있습니다. 그러나 새로운 뜨개질 우편물과 도구 세트를 배우는 것은 여전히 불편하고 쉽게 혼란스럽습니다.
코드 격리와 빠른 실행 비교
한 테스트의 결과가 다른 테스트 결과에 영향을 주지 않도록 하려면 각 테스트 시작 시 테스트에 대한 전체 주제를 생성한 다음 실행하기 전에 상태를 복원해야 합니다. 그러나 상태를 설정하는 데 시간이 오래 걸립니다(예: 데이터베이스에 연결하고 실제 데이터로 알려진 상태로 초기화).
이 문제에 대한 PHPUnit의 솔루션은 PHP를 테스트 언어로 사용하는 것입니다. 때때로 모든 기능을 갖춘 PHP는 짧고 간단한 테스트를 작성하기에는 너무 강력하지만 우리가 사용하는 프로그래머는 이미 PHP에 대한 완전한 경험을 가지고 있습니다. 주저하는 테스터를 설득해야 하기 때문에 이러한 초기 테스트 작성에 대한 장벽을 낮추는 것이 매우 중요합니다.