用于Java Play中测试的HTTP上下文!2.0.2

用于Java Play中测试的HTTP上下文!2.0.2,java,http,testing,playframework,playframework-2.0,Java,Http,Testing,Playframework,Playframework 2.0,我们正在尝试为视图编写测试,但其中一些需要会话变量才能正确呈现。这就是标准测试的样子: @Test public void indexTest() { running(fakeApplication(), new Runnable() { public void run() { Content html = views.html.index.render(loginForm); assertThat(contentType(

我们正在尝试为视图编写测试,但其中一些需要会话变量才能正确呈现。这就是标准测试的样子:

@Test
public void indexTest() {
    running(fakeApplication(), new Runnable() {
        public void run() {
            Content html = views.html.index.render(loginForm);
            assertThat(contentType(html)).isEqualTo("text/html");
            assertThat(contentAsString(html)).contains("log in");
        }
    });
}
loginForm是我们在测试类中声明的模拟表单

但是,当我们尝试运行此测试时,会出现以下错误:

'此处没有可用的HTTP上下文'

我们尝试使用testServer并尝试从对该服务器的请求中获取http上下文,但没有成功

谢谢:-)

编辑@nico_ekito

以下是有关我的loginForm的代码:

Form<Login> loginForm = Controller.form(Login.class);
formloginform=Controller.Form(Login.class);

但是,我认为问题在于被调用的控制器,因为视图不使用任何会话属性。但是,authenticate()方法(在控制器中,我相信表单提交到视图时会呈现该方法)使用会话。

如果发布整个视图,将非常有用,因为您可能正在使用auth插件/i18n插件或类似的东西,而这些插件反过来又使用会话属性。在运行测试之前,您还可以尝试使用Mocktio或类似工具模拟上下文

Context.current.set(
        new Context(mock(Request.class), 
                    new HashMap<String, String>(),  
                    new HashMap<String, String>()));
Context.current.set(
新上下文(mock(Request.class),
新建HashMap(),
新的HashMap());

我建议您再检查一次您的视图,检查会话属性。

您是否从“播放”命令行运行测试?我知道如果从eclipse运行测试可能会出现问题。是的,我们在终端中运行“播放测试”。请在loginForm模拟周围显示代码。为什么在视图中使用会话?您应该在控制器中获取会话变量,并使用参数显式地将其传递给视图,否?正如我在评论中所说,我们在视图中不使用会话(“因为视图不使用任何会话属性”)。