在功能测试中调用另一个控制器方法的行为非常奇怪

时间:2012-10-10 21:06:28

标签: playframework functional-testing playframework-1.x

当控制器的公共静态方法显式调用同一个控制器的另一个公共静态方法(使用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!");
    }
}

但如果我运行播放播放并在我的网络浏览器中调用“/”,则会返回“ok!”,不应该 FunctionalTest 完全像在生产中运行它或者像真正的服务器一样工作?它促使我避免进行功能测试,或者对预运行的Web服务器进行大量的手动设置和依赖,这并不酷。

提前致谢。

1 个答案:

答案 0 :(得分:1)

在您的浏览器中,当您调用“/”时,它会返回“ok”,但不会返回第一个响应。它首先返回重定向(302),然后返回200(确定)。

在功能测试中,它是相同的,你必须做类似

的事情
Response response = GET("/");
assertStatus(302, response);
response = GET(response.headers.get("Location").value())
assertIsOk(response);
assertEquals("ok!", getContent(response));