2

Play Framework를 사용하고 Java를 선택 언어로 사용하고 있습니다. 나는 외부 서비스에 대한 REST 호출을하는 Controller를 가지고있다. 필자는 외부 서비스를 조롱하여 컨트롤러의 기능을 테스트 할 계획입니다. 이를 위해 필자는 테스트 케이스를 아래와 같이 작성했습니다 (샘플). 나는 외부 서비스를 조롱하기 위해 내 테스트 내에 서버를 내장하고있다.Play Framework에서 컨트롤러 테스트

public class SomeControllerTest extends WithApplication { 

private static Server SERVER; 

@Override 
protected Application provideApplication() { 
    final Module testModule = new AbstractModule() { 
     @Override 
     public void configure() { 
      bind(AppDao.class).to(MockAppDaoImpl.class); 
     } 
    }; 
    return new GuiceApplicationBuilder().in(Environment.simple()).overrides(testModule).build(); 
} 

@BeforeClass 
public static void setup() { 
    Router router = new RoutingDsl() 
      .POST("/api/users") 
      .routeTo(() -> created()) 
      .build(); 
    SERVER = Server.forRouter(router, 33373); 
    PORT = SERVER.httpPort(); 
} 

@AfterClass 
public static void tearDown() { 
    SERVER.stop(); 
} 

@Test 
public void testCreateUser() { 
    ObjectNode obj = Json.newObject(); 
    obj.put("name", "John Doe"); 
    obj.put("email", "[email protected]"); 
    Http.RequestBuilder request = new Http.RequestBuilder() 
      .method(POST) 
      .bodyJson(obj) 
      .uri("/some/url/here"); 
    Result result = route(request); 
    assertEquals(ERR_MSG_STATUS_CODE, CREATED, result.status()); 
    assertEquals(ERR_MSG_CONTENT_TYPE, Http.MimeTypes.JSON, result.contentType().get()); 
} 

내 기대는 내가 테스트를 실행할 때, 모의 서버가, 내 컨트롤러가 통과 할 모의 201을 반환 서버 내 테스트 케이스를 호출 할 것입니다 실행하고 내 응용 프로그램의 테스트 구성에 따라 것입니다 . 그러나 setup() 메서드가 완료 되 자마자 모의 서버가 종료되고 컨트롤러가 호출을 할 수 없기 때문에 이런 일은 발생하지 않습니다.

내가 뭘 잘못하고 있니? 테스트 컨트롤러

+0

아마도'Helpers.testServer();'를 사용하여 서버를 얻은 다음'Helpers.start (server);를 사용하여 서버를 시작할 수 있습니다. – Kris

+0

@Kris 헬퍼가 만든 테스트 서버에 라우터를 어떻게 제공합니까? – Rishabh

+0

죄송합니다. 라우터로 시도한 적이 없습니다. – Kris

답변

3

오히려 제어기 Helpers.fakeRequest 방법을 사용하여 라우팅 역방향 테스트하기 위해 WithApplication

public class TestController extends WithApplication { 
    @Test 
    public void testSomething() { 
     Helpers.running(Helpers.fakeApplication(),() -> { 
      // put test stuff 
      // put asserts 
     }); 
    } 

}

로부터 상속에 의해 수행되어야한다. 외부 서비스는 mockito 또는 원하는 mocking 프레임 워크로 조롱 될 수 있습니다.

here 몇 가지 예를 찾을 수 있습니다.

+0

귀하의 의견과 링크에 감사드립니다. 나는 그것을 밖으로 시험해야 할 것이다. 예상대로 작동하면 정답으로 표시합니다. – Rishabh

관련 문제