PHPUnit 명령줄 테스트 도구는 phpunit 명령을 통해 호출됩니다. 다음 코드는 PHPUnit 명령줄 테스트 도구를 통해 테스트를 실행하는 방법을 보여줍니다.
phpunitArray테스트
Sebastian Bergmann의 PHPUnit 2.3.0
시간: 0.067288
확인(2개 테스트)
각 테스트에 대해 PHPUnit 명령줄 테스트 도구는 프로세스를 나타내는 문자를 인쇄합니다.
· 성공적인 테스트는 "."을 인쇄합니다.
·테스트 메소드를 실행할 때 어설션 실패가 발생하고 "F"가 인쇄됩니다.
·테스트 메소드 실행시 에러가 발생하며 "E"가 인쇄됩니다.
·테스트가 완료되지 않았거나 테스트에서 "I"가 인쇄되지 않습니다(이 책 끝 부분의 "완료되지 않은 테스트" 장 참조).
PHPUnit은 실패와 오류를 구별할 수 있습니다. 실패는 PHPUnit 어설션 위반이고 오류는 예상치 못한 예외 또는 PHP 오류입니다. 때로는 실수가 실패보다 수정하기 쉽기 때문에 이러한 구분이 유용할 수 있습니다. 문제 목록이 길다면 먼저 모든 오류를 해결한 다음 오류가 남아 있는지 확인하는 것이 좋습니다.
아래의 코드 명령줄 테스트 도구 옵션 중 일부를
살펴보겠습니다.
Sebastian Bergmann의 PHPUnit 2.3.0
사용법: phpunit [스위치] UnitTest [UnitTest.php]
--coverage-data <file> 코드 커버리지 데이터를 원시 형식으로 파일에 씁니다.
--coverage-html <file> 코드 커버리지 데이터를 HTML 형식으로 파일에 씁니다.
--coverage-text <file> 코드 커버리지 데이터를 텍스트 형식으로 파일에 씁니다.
--testdox-html <file> HTML 형식의 Agile 문서를 파일에 작성합니다.
--testdox-text <file> 텍스트 형식의 Agile 문서를 파일에 작성합니다.
--log-xml <file> 테스트 진행 상황을 XML 형식으로 파일에 기록합니다.
--loader <loader> 사용할 TestSuiteLoader 구현입니다.
--skeleton Unit.php의 Unit에 대한 스켈레톤 UnitTest 클래스를 생성합니다.
--wait 각 테스트 후 키 입력을 기다립니다.
--help 이 사용 정보를 인쇄합니다.
--version 버전을 인쇄하고 종료합니다.
phpunit UnitTest는
소스 파일 UnitTest.php에 정의되어야 하는 UnitTest 클래스에서 제공하는 테스트를 실행합니다.
UnitTest 클래스는 PHPUnit2_Framework_TestCase 클래스를 상속하거나 공개 정적 메소드 모음을 제공하고 PHPUnit2_Framework_Test 객체의 클래스(예: PHPUnit2_Framework_TestSuite 클래스의 인스턴스)를 반환해야 합니다.
phpunit UnitTest UnitTest.php는
UnitTest 클래스에서 제공하는 테스트를 실행합니다. 지정된 소스 파일(UnitTest.php)의 명령에 정의되어 있습니다.
--coverage-data, --coverage-
html 및 --coverage-text는
테스트 실행을 위한 코드 커버리지 정보 분석 및 수집을 제어합니다(이 책 끝 부분의 코드 커버리지 분석 섹션 참조).
--testdox-text는
HTML 또는 일반 텍스트 형식으로 테스트를 실행하기 위한 민첩한 문서를 생성합니다(이 책 마지막 부분의 "테스트의 다른 용도" 장 참조)
--log-xml은
테스트 실행을 위해 XML 형식으로 로그 파일을 생성합니다.
다음 예에서는 ArrayTest의 테스트를 위해 생성된 XML 로그 파일을 보여줍니다.
<?xml 버전="1.0" 인코딩="UTF-8"?>
<테스트 스위트>
<testsuite name="ArrayTest" 테스트="2" failures="0" 오류="0" time="0.020026">
<테스트 케이스 이름="testNewArrayIsEmpty" class="ArrayTest" time="0.014449"/>
<테스트 케이스 이름="testArrayContainsAnElement" 클래스="ArrayTest" time="0.005577"/>
</테스트 스위트>
</testsuites>
다음 XML 로그 파일은 FailureErrorTest라는 테스트 클래스의 두 가지 테스트(하나는 testFailure이고 다른 하나는 testError)에 대해 생성됩니다. 이는 실패와 오류가 어떻게 별도로 표시되는지 보여줍니다.
<?xml 버전="1.0" 인코딩="UTF-8"?>
<테스트 스위트>
<testsuite name="FailureErrorTest" 테스트="2" failures="1" 오류="1" time="0.013603">
<테스트케이스 이름="testFailure" 클래스="FailureErrorTest" 시간="0.011872">
<실패 메시지="" type="PHPUnit2_Framework_AssertionFailedError"></failure>
</테스트케이스>
<테스트케이스 이름="testError" 클래스="FailureErrorTest" 시간="0.001731">
<오류 메시지="" type="예외"></오류>
</테스트케이스>
</테스트 스위트>
</테스트 스위트>
--loader는
사용할 테스트 스위트 로더를 지정합니다.
표준 테스트 스위트 로더는 현재 작업 디렉토리와 PHP의 include_path 구성 지시문에 의해 정의된 경로에서 소스 파일을 찾습니다. PEAR의 명명 규칙에 따라 Project_Package_Class 형식으로 클래스 이름에 매핑된 소스 파일은 Project/Package/Class.php입니다.
--skeleton은
Unit 클래스(Unit.php 파일에 있음)에 대해 UnitTest(UnitTest.php 파일에 있음)라는 테스트 케이스 클래스에 대한 스켈레톤을 생성합니다. 원본 클래스의 각 메서드에 대해 생성된 테스트 케이스 클래스에 완료되지 않은 테스트 케이스가 제공됩니다(이 책 끝에 있는 "미완성 테스트" 섹션 참조).
다음 예제에서는 Sample이라는 클래스에 대한 스켈레톤 테스트 클래스를 생성하는 방법을 보여줍니다.
phpunit --skeleton 샘플
Sebastian Bergmann의 PHPUnit 2.3.0.
Sample에 대한 테스트 클래스 뼈대를 작성했습니다.
샘플테스트.php.
phpunit 샘플 테스트
Sebastian Bergmann의 PHPUnit 2.3.0.
나
시간: 0.007268
불완전한 테스트 사례가 1개 있습니다.
1) 테스트샘플메소드(샘플테스트)
좋아, 하지만 불완전한 테스트 케이스!!!
테스트 실행: 1, 불완전한 테스트 사례: 1.
기존 코드에 대한 테스트를 작성할 때 다음과 같은 동일한 코드 조각을 많이 반복해야 합니다.
public function testSampleMethod( ) {}
PHPUnit은 기존 코드를 분석하고 A를 생성하는 데 도움이 됩니다. 테스트 케이스 클래스를 위한 프레임워크.
--wait
각 테스트가 끝나면 키 입력을 기다립니다. 이는 항상 테스트만 실행되는 창에서 테스트를 실행하는 경우 특히 유용합니다.
팁: 테스트 중인 코드에 PHP 구문 오류가 있는 경우 텍스트 인터페이스 테스트는 오류 메시지를 출력하지 않고 바로 종료됩니다. 표준 테스트 스위트 로더는 테스트 스위트의 소스 파일에서 PHP 구문 오류를 확인하지만, 테스트 스위트에 포함된 소스 파일의 구문 오류는 확인하지 않습니다. PHPUnit의 향후 버전에서는 샌드박스 PHP 인터프리터 클래스를 사용하여 이 문제를 해결할 것입니다.