小编use*_*855的帖子

播放2如何在测试时覆盖全局设置

我有一个我想测试的播放2.3应用程序.此应用程序有一个Global.java类,它扩展GlobalSettings以便每5分钟启动一次重复的Akka任务.

在测试期间,我不希望任务被安排,因为它创建了几个问题而我不需要它.

因此,我想覆盖GlobalSettings.

通过阅读文档,看起来应该可以使用FakeApplication.但是我尝试以多种方式执行此操作,框架仍然运行我的默认全局设置.

我为我的测试创建了一个基类,如下所示:

public class BaseTest
  extends WithApplication
{
  protected FakeApplication provideFakeApplication()
  {
    return fakeApplication(inMemoryDatabase("test"), new GlobalSettings());
  }
}
Run Code Online (Sandbox Code Playgroud)

根据文档,如果测试类扩展WithApplication,则应该自动为我启动假应用程序,并提供配置.无论是否发生这种情况,即使在调用测试方法之前,也会触发默认的全局设置."new Global()"不会覆盖默认值.

我还尝试使用@BeforeClass注释手动启动fakeApplication,但没有成功.

我正在使用"activator test"命令运行测试.

看起来falseApplication确实用于每个测试,但在第一次测试开始之前,主应用程序启动并且其全局触发.这就是我不希望它发生的事情.

我做错了什么还是玩错了?如果它是一个bug,是否有解决方法?

编辑:我只是注意到即使数据库设置也没有被正确覆盖.我通常使用h2文件数据库进行开发,但我想要一个内存,不同的用于测试.但是,通过使用上面的代码不会更改使用的数据库,因此我的测试针对我的文件DB运行.

我也尝试过这样的事情:

  @Test
  public void testMyTest()
  {
    running(fakeApplication(inMemoryDatabase("test2")), () -> {
      //TESTING CODE THAT USES DB
    });
  }
Run Code Online (Sandbox Code Playgroud)

并且正文中的任何查询仍然针对配置文件中配置的数据库而不是内存数据库运行.

编辑 Chafik解决方案对我有用,因为通过在build.sbt文件中指定不同的配置文件,我设法覆盖了我的设置.事情仍然非常奇怪:1)现在,如果从我的fakeApplication构造函数中尝试通过在辅助方法中传递一个新实例来覆盖GlobalSettings,则设置被正确覆盖,而在我无法覆盖主要的一个之前2)如果我还原我的更改并且不提供测试配置文件,我仍然可以覆盖全局设置.也就是说,行为与最初的行为不同.

测试命令,它的配置,运行范围以及fakeApplication覆盖配置的方式和/或有关它的文档肯定不清楚和缺乏的东西肯定是奇怪的.然而,至少我实现了我想做的事情,我仍然会认为答案已经解决了.

java testing playframework-2.3

2
推荐指数
1
解决办法
3184
查看次数

标签 统计

java ×1

playframework-2.3 ×1

testing ×1