0

コントローラのパブリック静的メソッドが同じコントローラの別のパブリック静的メソッドを明示的に(Java呼び出しで)呼び出すと、Play!コードを実行するか、機能テストでリダイレクトするかを知りません。

私が持っている場合:

public class ApplicationTest extends FunctionalTest {
    @Test
    public void testProvesThatFunctionalTestsDoesntCallControllerMethods() {
        Response response = GET("/");

        assertEquals("", getContent(response));
    }

    @Test
    public void testProvesThatCallingItDirectlyWorksAsExpected() throws Exception {
        Response response = GET("/another");

        assertEquals("ok!", getContent(response));

    }

}

と:

public class Application extends Controller {
    public static void index() {
        another();
    }

    public static void another() {
        renderText("ok!");
    }
}

しかし、 playrunまたはplaystartを実行してWebブラウザで「/」を呼び出すと「ok!」が返されます。FunctionalTestは本番環境で実行するのとまったく同じように機能するのではないでしょうか。それは私に機能テストを避けさせたり、実行前のWebサーバーの膨大な手動セットアップと依存関係を持たせたりしますが、それはクールではありません。

前もって感謝します。

4

1 に答える 1

1

ブラウザでは、「/」を呼び出すと「ok」が返されますが、最初の応答では返されません。最初にリダイレクト(302)を返し、次に200(ok)を返します。

あなたの機能テストでも同じです、あなたは次のようなことをしなければなりません

Response response = GET("/");
assertStatus(302, response);
response = GET(response.headers.get("Location").value())
assertIsOk(response);
assertEquals("ok!", getContent(response));
于 2012-10-11T07:23:08.130 に答える