当前位置: 首页 > 面试题库 >

播放框架2.2.1:为测试创建Http.Context

顾高扬
2023-03-14
问题内容

我一直在尝试使用其构造函数创建Http.Context进行测试失败。有人看到我在做什么错吗?

我看了以下内容,但仅适用于Play 2.0:

播放框架2.0:将值存储在Http.Context中

看起来该类已针对2.2.1进行了更改,并且它为构造函数提供了更多参数,如下所示:

https://github.com/playframework/playframework/blob/2.1.x/framework/src/play/src/main/java/play/mvc/Http.java

这是我的代码:

import java.util.Map;
import java.util.Collections;
import org.junit.*;
import static org.mockito.Mockito.*;
import play.mvc.*;
import play.test.*;
import play.mvc.Http;
import play.mvc.Http.Context;
import play.api.mvc.RequestHeader;
import static play.test.Helpers.*;
import static org.fest.assertions.Assertions.*;


public class TemplateTests {

    public static FakeApplication app;
    private final Http.Request request = mock(Http.Request.class);

    @BeforeClass
    public static void startApp() {
        app = Helpers.fakeApplication();
        Helpers.start(app);
    }

    @Before
    public void setUp() throws Exception {
        Map<String, String> flashData = Collections.emptyMap();
        Map<String, Object> argData = Collections.emptyMap();
        Long id = 2L;
        play.api.mvc.RequestHeader header = mock(play.api.mvc.RequestHeader.class);
        Http.Context context = mock(Http.Context(id, header, request , flashData, flashData, argData));
        Http.Context.current.set(context);
    }


    @Test
    public void renderTemplate() {
        Content html = views.html.index.render();
        assertThat(contentType(html)).isEqualTo("text/html");
        assertThat(contentAsString(html)).contains("myindex");
    }

    @AfterClass
    public static void stopApp() {
        Helpers.stop(app);
    }
}

这是运行测试时看到的错误:

play test
[info] Loading project definition from /home/user/solr-segmentexplorer/explorer/project
[info] Set current project to explorer (in build file:/home/user/solr-segmentexplorer/explorer/)
[info] Compiling 1 Java source to /home/user/solr-segmentexplorer/explorer/target/scala-2.10/test-classes...
[error] /home/user/solr-segmentexplorer/explorer/test/TemplateTests.java:33: cannot find symbol
[error] symbol  : method Context(java.lang.Long,play.api.mvc.RequestHeader,play.mvc.Http.Request,java.util.Map<java.lang.String,java.lang.String>,java.util.Map<java.lang.String,java.lang.String>,java.util.Map<java.lang.String,java.lang.Object>)
[error] location: class play.mvc.Http
[error]         Http.Context context = mock(Http.Context(id, header, request , flashData, flashData, argData));
[error]                                         ^
[error] 1 error
[error] (test:compile) javac returned nonzero exit code
[error] Total time: 3 s, completed Nov 25, 2013 11:56:36 PM

有任何想法吗?

如果不创建上下文,则会得到:

[error] Test TemplateTests.renderTemplate failed: java.lang.RuntimeException: There is no HTTP Context available from here.


问题答案:

看起来这似乎已经为我解决了:

@Before
public void setUp() throws Exception {
    Map<String, String> flashData = Collections.emptyMap();
    Map<String, Object> argData = Collections.emptyMap();
    Long id = 2L;
    play.api.mvc.RequestHeader header = mock(play.api.mvc.RequestHeader.class);
    Http.Context context = new Http.Context(id, header, request, flashData, flashData, argData);
    Http.Context.current.set(context);
}

具体修复的部分是:

Http.Context.current.set(context);


 类似资料:
  • 问题内容: 我正在尝试在dev模式下的HTTPs上运行play framework 2.2.1应用程序。我使用以下命令: 我得到以下内容,这似乎还可以 但是,当我尝试通过HTTPS连接到应用程序时: 应用程序崩溃,我进入以下异常堆栈: 问题答案: 看来我的机器上的游戏无法生成自己的自签名证书。如果我使用自己的自签名证书,则可以正常使用。

  • 问题内容: 我遵循zentask教程并编写了一个junit测试,该测试不会从eclipse IDE运行,并给出以下异常 我阅读了一下,发现对于某些编辑buils.scala的人,在main help中添加了以下行:ebeanEnabled:= true 对我来说,它并没有关闭ide的运行方式。 有任何想法吗??? 问题答案: 有一篇有关设置单元测试以在IDE中运行的博客文章。建议将以下命令行添加到

  • 我用的是玩耍框架1.2.5.3。当我在我的项目上运行WAR命令时,我得到的是一个带有。战争延期。在这个目录中有一个WEB-INF目录,我的项目的其余部分也在这个目录中。 play-war命令不是应该将项目打包为标准的war jar,以便在web服务器上部署吗?我错过了什么?

  • 而是使用EventStream而不是ArchivedEventStream,当我运行命令alert(通知)消息时,会转到除原始发件人之外的所有连接套接字,我也可以如何发送到原始发件人。 这是我的模型和控制器,使用WebSocket 事件模型 这是控制器

  • Rest服务器(Play Framework)中的相关问题在负载测试期间出现“读取超时”异常 java版本“1.8.0_31”java(TM)SE运行时环境(Build1.8.0_31-B13)java HotSpot(TM)64位服务器VM(Build25.31-B07,混合模式) 我正在我的本地PC中测试jmeter。我使用了2000个线程,出现了超时异常,并且Socket不知为什么没有关闭。

  • 在用400k记录查询MongoDb时,我得到了< code>OutOfMemoryError。我收集了大约40万条用户记录。当我试图检索所有用户(在弹性搜索中转储)时,我得到了< code>OutOfMemoryError错误。 我已经浏览过这个链接,在application.config中添加了jvm.memory=-Xms64m -Xmx1024m,但还是一样的异常。 这是我的堆栈跟踪 -