설치
Magento 1은 기본적으로 composer를 사용하지 않으므로 composer를 사용하여 phpunit을 설치하거나 phar 버전을 다운로드하면 큰 차이가 없다고 생각합니다 .
사이트에서 다른 타사 모듈이나 라이브러리를 관리하기 위해 이미 composer를 사용하고 있다면 composer가 가장 적합합니다. PHP7을 사용하지 않으면 phpunit의 이전 버전으로 제한됩니다 (그래서 위의 4.8 버전에 링크했습니다).
통합 테스트 및 / 또는 단위 테스트
Magento 1은 매우 무거운 애플리케이션이므로 phpunit 부트 스트랩을 통합 및 단위 테스트 용으로 분리하는 것이 좋습니다.
단위 테스트 부트 스트랩은 오토로더 만 초기화하면되며 통합 테스트 부트 스트랩은 구성로드 및 db 연결을 포함한 전체 애플리케이션 환경을 초기화해야합니다.
Magento에서의 통합 테스트로 인해 단위 테스트보다 훨씬 느리게 실행되는 경향이 있습니다 (다른 애플리케이션보다 훨씬 더).
마 젠토를 PHPUnit으로 부트 스트랩
Magento의 오토로더는 클래스가있는 파일을 찾을 수 없으면 예외를 던지므로 PSR-0과 호환되지 않습니다. 이로 인해 class_exists
phpunit에서 일부 사용법이 중단 됩니다. 몇 가지 가능한 해킹 방법이 있습니다.
\Varien_Autoload::autoload()
예외를 무시하고 데코레이터로 래핑하여 Magento 오토로더의 등록을 해제하고 래퍼를 새로운 오토로더로 등록하십시오. 이는 오토로더를 등록하고 특정 오토로더 순서에 의존하는 타사 라이브러리와 충돌 할 가능성이 낮습니다.
- Magento 1에 내장 된 것을 감싸는 사용자 지정 오류 처리기를 사용하십시오. 사용자 지정 오류 처리기는 Magento 자동 로더에 의해 트리거 된 오류를 삼 킵니다. 이것이 Raphael의 테스트 프레임 워크가 사용 하는 솔루션입니다 . 다른 타사 확장 프로그램과 가장 호환되는 것 같습니다.
- 포함 경로 해킹을 사용하여
\Varien_Autoload::autoload()
파일이 존재하지 않는 경우 오류를 발생시키지 않도록 재정의 하십시오. 그러나 이것은 동일한 클래스를 재정의하는 여러 모듈과 충돌합니다. 나는이 접근법을 직접 사용하지 않습니다.
테스트 중에 시작되는 세션의 오류를 피하려면 $_SESSON = []
부트 스트랩에 간단히 설정 하십시오.
Mage::app()->setResponse($testResponse)
실제 응답 을 확장하지만 출력이나 헤더를 보내지 않는 사용자 정의 응답 오브젝트를 설정하십시오 .
런타임 상태를 완전히 변경하는 통합 테스트간에 Magento를 다시 초기화하려면을 사용하십시오 Mage::reset(); Mage::app()
. 그 후에는 오류 처리기를 다시 장식해야합니다.
비품
DB 조명기의 경우 조명기 방법에 일반 모델을 사용하여 조명기를 만듭니다 createSimpleProduct($sku)
. 마찬가지로 라파엘 사용했다 setUp()
및 tearDown()
(예를 들어, 테스트 후 롤백됩니다 트랜잭션에서 테스트를 감싸는 Mage::getSingleton('core/resource')->getConnection('default_setup')->beginTransaction()
).
매장 구성 설비의 경우,를 사용하여 인 메모리 전용 설비를 설정하는 경향이 Mage::app()->getStore()->setConfig($path, $value)
있습니다.
EcomDev_PHPUnit
확장은 또한 YAML 파일을 사용하여 DB기구를 만들 수있는 옵션을 제공하지만, 나 자신을 위해 나는 그 열심히 모델 클래스를 사용하여 만든기구에 비해 유지하기 찾을 수 있습니다. YMMV.
테스트 복식
레지스트리를 통해 생성 된 개체에 대한 테스트 복식를 주입하는 데 사용할 수 있습니다 Mage::getSingleton()
, Mage::getResourceSingleton()
하고 Mage::helper()
.
일부 다른 중앙 객체를 설정할 수 있습니다 Mage::app()
(예 : 요청). 테스트 복식을
통해 Mage::getModel()
또는 Mage::getResourceModel()
테스트 복식으로 작성된 클래스를 바꾸려면 사용자 정의 구성 오브젝트 랩퍼 를 사용해야합니다. 참조 예 즉 수행 할 수있는 방법 라파엘의 테스트 프레임 워크를.
요약
Magento가 부트 스트랩되면 거의 모든 것이 잘 테스트 될 수 있습니다. 핵심 코드가 사용하는 대량의 메소드 체인으로 인해 딥 모의를 만들 준비를하십시오.
설정이 해킹되었지만 잘 작동하고 테스트 결과 Symphony 앱의 테스트 스위트와 거의 비슷한 많은 자신감과 가치를 얻습니다.