2011-09-22 10 views
4

저는 PHP로 훌륭한 소프트웨어를 빠르게 만들고 젠드 프레임 워크를 사용해야합니다. 나는 TDD 방식으로이 일을 시도한다. 왜냐하면 나보다는 경험이 많은 사람들이 당신의 코드를 관리하기 쉽도록 빠르게 구축하는 가장 좋은 방법이라고 말했다.젠드 액션 컨트롤러를 어떻게 단위 테스트합니까?

그래서 나는 phpunit에 관한 책을 얻었고 멋지게 나갔다. 실제로 초기 번거 로움에 따라 속도가 빨라지고 코드는 여전히 멋지다. 내 물건을 개별적으로 검사 할 수있는 방법과는 거리가 멀다.

그러나 젠드 액션 컨트롤러를 테스트 할 때 한 가지 중요한 문제가 있습니다. zend_test 패키지는 그것을 테스트하는 방법을 제공합니다. 그러나 그것은 전체 응용 프로그램을 즉시 테스트하는 것으로 보입니다. 필자는 어떤 저장소를 모방하거나 조롱하거나 다른 종속성을 주입 할 수있는 것처럼 보이지 않습니다. 그래서 나는 프로젝트의 나머지 부분에서 할 수있는 것처럼 광범위하게 테스트하지 못했습니다.

저는이 문제를 해결하기 위해 노력해 왔습니다. 하지만 그물에서 찾을 수있는 것은 그것을하는 zend_test 방법이었습니다.

본인의 의견을 알고 싶습니다. 어쩌면 내가 할 일을 끝내려는 시도 일 수도 있고, 아니면 젠드 액션 컨트롤러에 대한 단위 테스트를 개발하는 더 좋은 방법 일 수도 있습니다.

답변

1

Zend 1에서 컨트롤러는 정상적인 클래스입니다.

class MyController extends Zend_Controller_Action 
{ 
    public functioni init() 
    { 
     $this->repository = new MyRepository(); 
    } 

    public function setRepository($repository) 
    { 
     $this->repository = $repository; 
    } 

    public function saveAction() 
    { 
     $dataToWrite = manipulate in some way $this->getRequest()->getParams(); 
     $this->repository->update($dataToWrite, ...); 
    } 
} 

을하지만 당신은 또한 요청을 주입해야하며, 응답을하도록 파견 : 당신은 그것을 인스턴스화 할 수, 당신은 당신의 저장소의 phpunit을 모의하여 기본 저장소를 대체 (예를 들어,이 메소드를 호출 할 수 있습니다.

컨트롤러에 대한 개인적으로 단위 테스트보다는 기능 테스트 (예 : Zend_Test)를 쓰는 편이 더 느립니다. 메모리가 부족한 sqlite 데이터베이스가 필요할 것입니다. 그러나 응용 프로그램이 실제로 작동하는지는 알 수 있습니다. 모든 클래스를 단위 테스트 할 수 있지만 개체를 ​​연결하는 팩토리가 잘못된 경우 끊어진 응용 프로그램이있는 녹색 PHPUnit 막대가 계속 표시됩니다.

+0

고마워, 실제로 나는 그 기능 테스트를해야 할 필요가 있음을 알았다. 나는 그 테스트를 손으로해야한다. 나는 단위 테스트와 함께 그들을 운영하지 않을 것이라고 생각하지 않습니다. (하지만 잘못 될 수 있습니다.) 나는 어떤 물체가 보이는 지 알고 싶기 때문에 시도해 보았습니다. – Bram

+0

실행하지 않아도됩니다. 예를 들어 기능 테스트가 너무 많거나 너무 느린 경우 PHPUnit을 사용하여 테스트 케이스를'@group functional '으로 표시하고'phpunit --group $ groupname'을 실행할 수 있습니다. 그러나 소스 코드를 작성/실행하기 전에 모든 테스트가 실행되는지 확인하십시오! – Francesco

1

Rob Allen은 PHPUnit을 사용한 Zend Controller Actions 테스트에서 very good article이라고 썼습니다. 이것은 Zend_Test_PHPUnit_ControllerTestCase을 사용하여 전체 응용 프로그램을 부트 스트랩하고 응답을 테스트합니다.

PHPUnit 및 기능 테스트는 일반적으로 컨트롤러 테스트에 적합하지 않습니다. 반대로 컨트롤러는 단위 테스트에 적합하지 않습니다. 이 말은 단위 테스트 개념이 컨트롤러 계층의 개념에 맞지 않는다는 것을 의미하며 제어기는 일반적으로 단위 테스트가 본질적으로 어려워지는 방식으로 구성됩니다.

제가 제안 할 수있는 최선의 대안은 Selenium입니다. 이렇게하면 컨트롤러의 응답이 테스트됩니다. 대부분의 경우 보기을 테스트합니다. Selenium 테스트 외에 모델과 나머지 라이브러리의 단위 테스트도 수행해야합니다. 컨트롤러 레이어에서 실제로 얻을 수있는 것만큼 방탄입니다.

+0

덕분에, 나는 artical를 찾았는데, 나는 우아한 방법입니다 mabey 그래서 phpunit와 셀레늄을 통합 할 수 있다고 들었어요. – Bram

관련 문제