2013-04-21 4 views
6

나는 내 컨트롤러 내 POST 방법 중 하나를 테스트하고 싶었다, 그래서 나는 이런 식으로 뭔가를 작성 :플레이 프레임 워크 - 테스트 POST 컨트롤러 방법

@Test 
    public void shouldSaveNewCollectionToDatabase(){ 
     String body = "{\"name\":\"collectionName\", \"owner\": {}}"; 
     JsonNode json = Json.parse(body); 
     FakeRequest request = new FakeRequest(POST, "/rest/collections/add").withJsonBody(json); 

     Result result = callAction(controllers.routes.ref.SetsAndCollections.postCollection(), request); 
     verify(questionSetCollectionDAO).save(any(QuestionSetCollection.class)); 
    } 

것은이 컨트롤러 메소드가 호출되지 않기 때문에,이 테스트가 실패 전혀 내 questionSetCollectionDAO 메서드가 호출되지 않습니다.

I 이벤트는 방법의 상단에 약간의 인쇄를 넣어 :

@BodyParser.Of(Json.class) 
@play.db.jpa.Transactional 
public static Result postCollection(){ 
    System.out.println("I am here"); 
... 

나는 콘솔에 출력을 볼 수 없습니다.

가짜 요청으로 컨트롤러 메소드를 호출 할 수있는 방법이 아닌 경우 어떻게해야합니까?

나는 약 fakeApplication에 대해 읽었지만 POST 컨트롤러 방법에 대한 간단한 테스트를 수행하는 다른 방법이 있습니까?

+1

혹시 이것을 알아 내거나 다른 것을 찾았습니까? – Meredith

답변

0

결과의 http 상태 코드를 인쇄 할 수 있습니까? 303 리디렉션 인 경우 (컨트롤러가 호출되지 않기 때문에) POST 메서드를 실행하기 위해 로그인 세션 세션 쿠키를 제공해야 할 가능성이 큽니다. 우선 당신이 가짜 응용 프로그램을 시작해야 https://stackoverflow.com/a/13953375/286550

2

당신의 휴식 서비스를 테스트하기 위해 :

는 플레이 2에 인증 쿠키를 얻는 방법에 대한이 답변을 참조하십시오.
FakeApplication fakeApplication=fakeApplication(); 
start(fakeApplication); 

그리고 마지막에

당신이 테스트 과정을 촉진하기 위해 당신이 당신의 테스트 클래스에서이 메소드를 추가 할 수있는 많은 시험 방법이 있다면 그것을

stop(fakeApplication); 

을 중지 권유하는 당신의 테스트 PF.

FakeApplication fakeApplication = fakeApplication(); 

@Before 
public void beforeTest() { 
    start(fakeApplication); 
} 

@After 
public void afterTest() { 
    stop(fakeApplication); 
} 
관련 문제