PHPUnitManual:3

From 흡혈양파의 번역工房
Jump to: navigation, search
제 3 장 PHPUnit의 설치

PHPUnit 은 3 가지 방법으로 인스톨할 수 있습니다. PEAR 인스톨러 [1] 또는 Composer [2] 에서 PHPUnit 와 종속항목 (dependencies) 을 다운로드하여 설치할 수도 있고, PHPUnit 를 PHP Archive (PHAR) [3] 형식으로 다운로드할 수도 있습니다. PHAR 버젼의 PHPUnit 는 모든 필수 종속항목이 (옵션 종속항목의 일부도) 하나의 파일로 통합되어 있습니다.


주의사항
Composer 및 PHP Archive (PHAR) 는 PHPUnit 3.7 이후부터 제공됩니다 (안정적으로 제공한 것은 PHPUnit 3.7 이후부터 입니다). 그 이전 버젼의 PHPUnit 는 이들 형식으로는 배포되지 않습니다.


주의사항
PHPUnit 3.7 은 PHP 5.3.3 이상에서 동작합니다만, PHP 5.4.7 이상을 강하게 권고합니다.
PHPUnit 은 Code Coverage 정보를 처리하기 위한 라이브러리인 PHP_CodeCoverage 를 사용합니다만 PHP_CodeCoverage 라이브러리는 Xdebug 의 2.0.5 이상 버전을 필요 로 합니다. Xdebug 는 2.2.0 이상을 강하게 권고합니다.


PEAR

다음 2 개의 명령을 실행하면, (root 권한이 필요할 수도 있습니다) PHPUnit 에 필요한 모든것이 PEAR 인스톨러를 통해 인스톨됩니다.

localhost # pear config-set auto_discover 1
localhost # pear install pear.phpunit.de/PHPunit


주의
OS 나 PHP 환경에 따라서는 위 명령을 실행하기 전에, PEAR 의 설치 또는 업데이트가 필요할 수 있습니다.
기존 PEAR 환경의 업데이트는, 일반적으로 sudo pear upgrade PEAR 를 실행하면 됩니다. PEAR 의 신규 인스톨 방법은 PEAR 매뉴얼 [4] 를 참조하십시오.


COMPOSER

PHPUnit 를 프로젝트 단위로 도입하여 당신의 프로젝트에 종속되도록 하기 위해서는, 단순히 당신의 프로젝트의 composer.json 파일에 phpunit/phpunit 에 관한 종속을 정의하면 됩니다. 다음 구문은 최소한의 compooser.json 파일의 예로, PHPUnit 3.7 에의 환경변수를 개발용으로 정의하고 있습니다.

{
    "require-dev": {
        "phpunit/phpunit": "3.7.*"}
}


Composer 를 통해서 시스템 전체에 phpunit 을 독립적으로 인스톨하기 위해서는 다음과 같은 composer.json 파일을 사용할 수 있습니다.


사용을 위해 stand-alone 으로 인스톨하기 위해서는 임의의 디렉토리에 다음과 같은 composer.json 을 만들어서 사용할 수 있습니다.

{
    "require-dev": {
        "phpunit/phpunit": "3.7.*"
    },

    "config": {
        "bin-dir": "/usr/local/bin/"
    }
}


PHP Archive (PHAR)

PHPUnit 을 PHP Archive (PHAR) 형태로 다운로드할 수도 있습니다. PHAR 버젼의 PHPUnit 는 모든 필수 종속항목이 (옵션 종속항목의 일부도) 하나의 파일로 통합되어 있습니다 :

localhost # wget http://pear.phpunit.de/get/phpunit.phar
localhost # chmod +x phpunit.phar


옵션 패키지들

다음의 옵션 패키지도 사용 가능합니다.

DbUnit   DbUnit 의 PHP/PHPUnit 용 이식. 데이터베이스 통신을 테스트 가능하게 합니다.

이 패키지는 PEAR 를 사용해 다음 명령을 입력하여 인스톨합니다.

localhost # pear install phpunit/DBUnit

composer 로 인스톨하기 위해서는 "require-dev" 에 다음 행을 추가합니다.

"phpunit/dbunit": ">=1.2"
PHP_Invoker  ; callable 을 timeout 을 지정하여 실행하는 유틸리티 클래스. 엄격한 timeout 판정을 위하여 필요한 패키지.

이 패키지는 다음 명령으로 인스톨합니다.

localhost # pear install phpunit/PHP_Invoker

composer 로 인스톨하기 위해서는 "require-dev" 에 다음 행을 추가합 니다.

"phpunit/php-invoker": "*"
PHPUnit_Selenium   PHPUnit 용 Selenium RC integration.

이 패키지는 다음 명령으로 인스톨합니다.

localhost # pear install phpunit/PHPUnit_Selenium

composer 로 인스톨하기 위해서는 "require-dev" 에 다음 행을 추가합 니다.

"phpunit/php-selenium": ">=1.2"
PHPUnit_Story   PHPUnit 을 사용하는 Behavior-Driven Development 의 Story-based test runner.

이 패키지는 다음 명령으로 인스톨합니다.

localhost # pear install phpunit/PHPUnit_Story

composer 로 인스톨하기 위해서는 "require-dev" 에 다음 행을 추가합 니다.

"phpunit/phpunit-story": "*"
PHPUnit_SkeletonGenerator   제품 코드 클래스를 기반으로 테스트 클래스의 뼈대를 생성하거나,혹은 그 역을 하는 툴.

이 패키지는 다음 명령으로 인스톨합니다.

localhost # pear install phpunit/PHPUnit_SkeletonGenerator
PHPUnit_TestListener_DBUS   이벤트를 DBUS 로 전송하기 위한 listener.

이 패키지는 다음 명령으로 인스톨합니다.

localhost # pear install phpunit/PHPUnit_TestListener_DBUS
PHPUnit_TestListener_XHProf   XHProf 를 사용하여 테스트 대상 코드를 자동 프로파일링하는 테스트 listner.

이 패키지는 다음 명령으로 인스톨합니다.

localhost # pear install phpunit/PHPUnit_TestListener_XHProf
PHPUnit_TicketListener_Fogbugz   Fogbugz 의 공개 (issue) API 에 관한 ticket 의 listener.

이 패키지는 다음 명령으로 인스톨합니다.

localhost # pear install phpunit/PHPUnit_TicketListener_Fogbugs
PHPUnit_TicketListener_GitHub   GitHub 의 공개 (issue) API 에 관한 ticket 의 listener.

이 패키지는 다음 명령으로 인스톨합니다.

localhost # pear install phpunit/PHPUnit_TicketListener_GitHub
PHPUnit_TicketListener_GoogleCode   Google Code 의 공개 (issue) API 에 관한 ticket 의 listener.

이 패키지는 다음 명령으로 인스톨합니다.

localhost # pear install phpunit/PHPUnit_TicketListener_GoogleCode
PHPUnit_TicketListener_Trac   Trac 의 공개 (issue) API 에 관한 ticket 의 listener.

이 패키지는 다음 명령으로 인스톨합니다.

localhost # pear install phpunit/PHPUnit_TicketListener_Trac


업그레이드

PHPUnit 3.6 부터 PHPUnit 3.7 로의 업그레이드 시의 몇가지 호환성 문제입니다.


업그레이드 자체는 매우 간단하고 아무런 문제도 일으키지 않습니다. 주요 오픈 소스 프레임워크 전체를 테스트한 결과 아무런 문제도 발생하지 않았습니다. 그렇지만, 프로젝트에 따라서 상황이 다를 수 있고, 지금까지의 베타 버젼을 접하지 않았던 사람에게는 낯설 수 있습니다. 이런 경우에 이 문서를 참고하십시오.

권장되지 않는 OutputTestCase 가 삭제되었다 PHPUnit_Extensions_OutputTestCase 클래스가 삭제되었습니다. PHPUnit 3.6 에서는 사용하지 말 것을 권장하는 notice 를 표시되던 클래스입니다. 출력을 테스트하는 방법은 "출력 내용의 테스트" 를 참조하십시오.
테스트 케이스를 실행할 때마다 현재 작업디렉토리로 되돌아 가게 되었다 테스트 도중에 작업 디렉토리 (cwd) 를 변경할 경우, 지금까지의 PHPUnit 에서는 Code Coverage 출력에서 문제가 발생하였습니다. 3.7 에서는 테스트 케이스 별로 작업 디렉토리를 복원하도록 하였기 때문에 다른 테스트 케이스에서 작업 디렉토리를 변경하는 테스트 케이스에서 문제가 발생합니다. 이런 테스트 케이스는 원칙적으로 바람직하지 않은 테스트 케이스이고 간단히 수정 가능할 것입니다.
테스트 listner 가 autoload 를 호출하도록 되었다 "테스트 listener" 에서 설명하는 커스텀 listener 를 사용할 때, 지금까지의 PHPUnit 에서는 테스트 listener 읽기에 실패해도 에러로 처리하지 않았습니다. 따라서, 테스트 listener 읽기 실패가 원인으로 문제가 발생한 경우, 원인을 찾기가 힘들었습니다. 3.7 부터는 autoload 에서 클래스를 찾도록 되었습니다. 테스트 listener 를 발견하지 못 한 경우, aotoload 에서 에러를 발생시킵니다. Autoloader 가 테스트 listener 를 발견하지 못 하는 문제가 발생한 경우에는 해당 listener 를 삭제하거나, bootstrap.php 에서 읽어들이도록 하여 해결하십시오.
mock object 의 파라메터가 복제되지 않도록 되었다 지금까지는 mock 을 사용할 경우 모든 오브젝트의 파라메터를 복제하였습니다. 이 때문에 method 에 전달된 오브젝트의 동일성을 확인하고 싶을 때, 혹은 복제가 불가능한 오브젝트가 존재할 때 등의 문

제가 있었습니다. 다수의 의견을 받아들여, 동작을 수정하였습니다. 예 10.14 는 새로운 방식의 활용 예이고, 예 10.15 는 과거의 방식을 사용하기 위한 (swich back) 방법입니다.

addUncoveredFilesFromWhitelist 가 삭제되고, processUncoveredFilesFromWhitelist 로 대체되었다 Code Coverage 의 생성에서 <whitelistaddUncoveredFilesFromWhitelist="true"> 를 사용할 경우, 커버되지 않는 파일들은 PHPUnit 에 포함 (include) 되지 않았습니다. 이는 이런 파일들에 실행 코드를 포함시킨 경우에 문제였습니다. PHPUnit 3.7 부터는 파일을 스캔하여 실행 가능한 파일을 찾아내고, 그 중 어떤 파일을 포함시키지 않을 것인가를 조사하게 되었습니다. 이로 인해 Code Coverage 의 결과가 변할 수도 있습니다.


과거의 버젼과 같은 방식으로 사용하기 위해서는, <whitelist processUncoveredFilesFromWhitelist=="true"> 를 설정하십시오. PHPUnit 3.6 의 방식과 3.7 의 방식 중 선택하여 사용할 수 있도록, 당분간은 두 방식이 모두 사용 가능합니다.

cacheTokens 의 기본값Default value이 false 로 되었다 PHPUnit 3.7.2 부터는 토큰화된 파일을 기본적으로는 일시 저장 (cache) 하지 않도록 하였습니다. 대규모 프로젝트의 Code Coverage레포트를 작성할 경우, 캐쉬는 대량의 메모리를 소비합니다. 또한, whitelist 의 사양이 변경된 영향으로 인해 수 천 개의 클래스를 포함하는 code base 에서는 캐쉬가 문제가 됩니다.


비교적 소규모의 프로젝트이거나, 충분한 메모리를 확보할 수 있는 경우에는 phpunit.xml 의 cacheTokens="true" 를 추가해 주십시오. 자세한 것은 "PHPUnit" 를 참조하십시오.


Notes