2015-01-11 3 views
0

단위 테스트 컨트롤러는 어떻게해야합니까? 우선, 데이터베이스 결과를 모의합니다. 하지만 그 다음엔? 컨트롤러에서 코드를 다시 작성하고 mock에 대한 모든 쿼리를 테스트해야합니까? 또는 컨트롤러 클래스를 호출하고 전체 결과를 테스트 할 수 있습니까?단위 테스트 컨트롤러 사례

class User { 

    public function foo() 
    { 
     // query 1 
     // query 2 
     return $someresults; 
    } 

} 

나는 그것이 그렇게 테스트해야합니다 :

class TestUser { 

    public testFoo() 
    { 
     // query1 
     // assertions 
     // query2 
     // assertions 
     // results asserions 
    } 

} 

또는 오히려 같은 :

class TestUser { 

    public function testFoo() 
    { 
     $user = new User($mockEntityManager); 
     // assertions on $user object 
    } 

} 

이 작업을 수행하는 적절한 방법은 무엇입니까 나는이 클래스를 가지고, 예를 들어, 의미? 모든 쿼리를 테스트하면 코드가 두 배로 늘어나고 저장소 클래스의 외부 쿼리에 문제가 생깁니다 (모의해도 될지 모르겠다). 일반적인 결과를 테스트하는 것은 괜찮지 만 컨트롤러의 메서드는 뷰 템플릿을 반환하므로 데이터베이스 응답을 테스트하는 방법을 잘 모르겠습니다.

+0

가능한 답변이 너무 많거나 좋은 대답은이 형식에 비해 너무 길어집니다. 응답 집합의 범위를 좁히거나 몇 단락에서 대답 할 수있는 문제를 찾아내는 세부 정보를 추가하십시오. – Ziumin

답변

0

IMHO 컨트롤러를 서비스로 정의하는 것이 가장 좋습니다 (here). 요청/응답을 처리하기 위해 웹 크롤러가 필요 없지만 그의 trhow 조롱 된 서비스와 만 상호 작용할 수 있습니다. 더 세부 사항에 대한

확인 this article

희망이 도움

0

당신이해야하지 단위 테스트 컨트롤러, 그들이 어떤 논리 자체를 포함하지 않는. 기능 테스트가 필요하므로 원하는 방식으로 동작하는지 확인할 수 있습니다.