2

私はPlay Frameworkを使用しており、Javaを選択する言語として使用しています。私は、外部サービスへのREST呼び出しを行うコントローラを持っています。私は外部サービスを模擬して、私のコントローラの機能をテストするつもりです。これを実現するために、以下に示すようにテストケースを作成しました(サンプル)。私は外部サービスを模擬するために私のテストの中にサーバーを埋め込んでいます。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または他のモックフレームワークでちょうど嘲笑されるかもしれません。

hereいくつかの例があります。

+0

ご連絡ありがとうございます。私はそれを試してみる必要があります。期待どおりに動作したら正解とマークします。 – Rishabh

関連する問題