2012-04-05 4 views
1

Doctrine의 엔티티 관리자를 사용하는 간단한 컨트롤러 클래스가 여러 개있어 데이터를 검색하여 뷰에 전달합니다.단위 테스트 기본 컨트롤러

public function indexAction() { 
    $pages = $this->em->getRepository('Model_Page')->findAll(); 
    $this->view->pages = $pages; 
} 

정확히 우리가 여기 테스트해야 무엇? 나는 다음을 보장하기 위하여 조치에 라우팅 테스트 할 수

  • 가 제대로 구성되어있어
  • 나는 잠재적으로 적절한보기 변수가 설정되는 것을 테스트 할 수 있지만,이

findAll() 방법 복잡

  • 아마해야 모의 데이터를 사용하여 테스트 할 수있는 저장소 계층에 있어야하지만이 경우 유형이이고 테스트 결과는

    컨트롤러 테스트의 일부로 테스트해야 할 사항은 무엇입니까?
  • 답변

    1

    컨트롤러가 응용 프로그램의 핵심 논리를 유지합니다. 단순한 "인덱스"컨트롤러 동작에는 특정 기능이 없지만 데이터를 확인/적극적으로 사용하고 뷰 모델을 생성하는 기능은 시스템의 기능을 대부분 갖추고 있습니다.

    예를 들어, 로그인 양식을 고려하십시오. 로그인 데이터가 게시 될 때마다 컨트롤러는 로그인/비밀번호를 확인하고 다음을 반환해야합니다. 1) 로그인이 양호 할 때마다 페이지를 색인화합니다. 환영하는 {user} 텍스트를 표시하십시오. 2) db에 로그인이 없다는 로그인 페이지로 이동합니다. 3) 로그인 페이지에 암호가 db에 없다는 메시지가 표시됩니다.

    이러한 세 가지 유형의 출력은 완벽한 테스트 사례를 만듭니다. 올바른 동작을 통해 올바른 뷰 모델/뷰가 클라이언트로 다시 전송되는지 확인해야합니다.

    신비한 것 같은 컨트롤러를 보지 말아야합니다. 이것은 단지 다른 코드 조각 일 뿐이며 다른 코드처럼 테스트됩니다. 사용자에게 비즈니스 가치를 부여하는 복잡한 논리를 테스트해야합니다.

    또한 의미있는 테스트 사례를 생성하기 위해 Cucumber와 같은 프레임 워크로 수락 테스트를 사용하는 것이 좋습니다.

    +0

    감사합니다. Dmitriy. 수락 테스트는보기에서 생성 된 출력이 올바른지 확인하는 데 매우 유용합니다. 마치 밍크와 같은 Behat http://docs.behat.org/cookbook/behat_and_mink.html#writing-your-first-web-feature – dianovich

    +0

    당신은 환영합니다 :) –

    0

    아마도 컨트롤러는 많은 종속성을 가지고 있으므로 테스트하기가 가장 힘듭니다. 이론적으로는 완전히 고립시켜 테스트해야하지만 이미 본 것처럼 말이됩니다.

    아마도 기능 또는 수용 테스트부터 시작해야합니다. 그것은 당신의 컨트롤러 행동 전체를 테스트합니다. 나는 이전의 대답에 동의합니다, 당신은 수용 테스트 도구를 시도해야합니다. 하지만 Cucumber는 Ruby 용이고 PHP의 경우 Codeception을 사용해 볼 수 있습니다. 테스트를 간단하고 의미있게 만듭니다.

    또한 부호 매김 페이지에 how to test sample controllers에 기사가있다.