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!");
    }
}

但是,如果我在我的网络浏览器中运行play runplay start并调用“/”然后它返回“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 回答