簡體   English   中英

FakeApplication使用特定的application.conf?

[英]FakeApplication using a specific application.conf?

如何創建一個FakeApplication來使用我的dev.conf而不是默認的application.conf運行我的測試?

我目前的測試包括以下構造:

Map<String, String> map = new HashMap<>();
map.put("config.file", "/path/to/dev.conf");
FakeApplication fakeApplication = fakeApplication(map);
TestServer testServer = testServer(3333, fakeApplication);
// testServer.start();
running(testServer, HTMLUNIT, new F.Callback<TestBrowser>() {
    public void invoke(TestBrowser browser) {
        //do something
    }
});

Play Framework文檔中改編的關於編寫測試的代碼會引發以下異常,因為默認的application.conf不能在我的開發系統上運行。 如果我取消注釋testServer.start(); 我可以更清楚地看到它。

[WARN] [01/01/2013 18:36:59.505] [pool-4-thread-3] [Dispatchers] Dispatcher [akka.actor.promises-dispatcher] not configured, using default-dispatcher
[WARN] [01/01/2013 18:36:59.521] [play-akka.actor.default-dispatcher-2] [Dispatchers] Dispatcher [akka.actor.actions-dispatcher] not configured, using default-dispatcher
[error] Test test.ApplicationTest.runInBrowser failed: Server is not started!
[error]     at scala.sys.package$.error(package.scala:27)
[error]     at play.api.test.TestServer.stop(Selenium.scala:117)
[error]     at play.test.Helpers.stop(Helpers.java:325)
[error]     at play.test.Helpers.running(Helpers.java:355)
[error]     at test.ApplicationTest.runInBrowser(ApplicationTest.java:74)
[error]     ...

我假設這條線

map.put("config.file", "/path/to/dev.conf");

是錯的,必須進行調整。 但是怎么樣?

用這種方式替換主配置是不可能的。 您只能通過將地圖傳遞給fakeApplication來覆蓋特定設置。

即如果您的配置包含:

mongodb.default.uri = ...
logger.root = ERROR

您可以通過在地圖中放置新值來覆蓋它:

Map<String, String> map = new HashMap<>();
map.put("mongodb.default.uri", "...");
map.put("logger.root", "INFO");

FakeApplication fakeApplication = fakeApplication(map);

我想你可能想要運行你的測試命令,如下所示:

play -Dconfig.file=path/to/dev.conf test

我有同樣的問題,我做了類似的事情來解決它:

  private Configuration additionalConfigurations;

  @Before
  public void initialize() {
    ClassLoader cl = ClassLoader.getSystemClassLoader();
    Config additionalConfig  =ConfigFactory.parseFile(newFile(cl.getResource("application.dev.conf").getF)));
    additionalConfigurations = new Configuration(additionalConfig);
  }
  @Test
  public void testPropertiesGetLoaded() throws Exception{

    running(testServer(3333, fakeApplication(additionalConfigurations.asMap())), HTMLUNIT, new F.Callback<TestBrowser>(){
      public void invoke(TestBrowser browser) throws InterruptedException {

        String specificProperty = Play.application().configuration().getString("db.ro.url");
        Logger.info("printingVar:" + specificProperty);

      }
    });
  }

其中application.dev.conf可以是你想在那里設置的whaterver配置文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM