私は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()
メソッドが完了すると、モックサーバーは強制終了され、コントローラはそのメソッドを呼び出すことができません。
私はここで間違っていますか?テストコントローラの
「Helpers.testServer();」を使用してサーバーを取得し、次に「Helpers.start(server);」を使用して開始することができます。 – Kris
@Krisヘルパーによって作成されたテストサーバにどのようにルータを提供しますか? – Rishabh
申し訳ありませんが、ルータでそれを試したことはありません。 – Kris