Как избежать обнуления существующего свойства, если не указано значение переопределения - PullRequest
0 голосов
/ 20 марта 2019

My application.conf содержит следующие записи

mail{
  signupUrl3 = "/ws/users/signup/"
  signupFrom="Sign Up<mailrobot@somedomain.com>"
  signupReply="No reply <noreply@somedomain.comm>"

}

play.mailer{

  host = somedomain.com // (mandatory)
  port = 25 // (defaults to 25)
  ssl = no // (defaults to no)
  tls = no // (defaults to no)
  tlsRequired = no // (defaults to no)
}

У меня есть еще один application_test.conf файл в каталоге test, который я собираюсь использовать для тестов.

Его записи

mail{
  signupUrl = "/test/ws/users/signup/"
  signupFrom="Sign Up<mailrobot@somedomain.com>"
  signupReply="No reply <noreply@somedomain.comm>"

}


play.mailer {

  host = localhost // (mandatory). The domain of mail server i.e. the server is responsible for sending/receiving emails for this domain
  port = 9000 // (defaults to 25)

}

В своих модульных тестах я загружаю application.conf и application_test.conf.Фрагмент модульного теста выглядит следующим образом:

    class UserControllerUnitSpec extends PlaySpec with BeforeAndAfterAll with BeforeAndAfterEach with OneAppPerSuiteWithComponents{
    ...
    val myConfigFile:File = new File("test/application_test.conf")
      println("file exists: "+ myConfigFile.exists())
      val parsedConfig = ConfigFactory.parseFile(myConfigFile)

      val extraConfig = ConfigFactory.load(parsedConfig)

      val additionalConfiguration = new Configuration(extraConfig)


      override def components: BuiltInComponents = new BuiltInComponentsFromContext(context) with NoHttpFiltersComponents {

        import play.api.mvc.Results
        import play.api.routing.Router
        import play.api.routing.sird._

println("initial configuration: "+context.initialConfiguration) //from application.conf
    println("extra configuration: "+additionalConfiguration)//from application_test.conf
    println("final configuration is "+configuration) //both application.conf and application_test.conf because the configuration property is being overridden below

    lazy val router: Router = Router.from({
      case GET(p"/") => defaultActionBuilder {
        Results.Ok("success!")
      }
    })
override lazy val configuration: Configuration = context.initialConfiguration ++ additionalConfiguration

"configuration" should {
    "be ok " in {

    }
  }
      }

Когда я запускаю описанный выше фиктивный тест, я вижу, что конфигурации верны.Если свойство host присутствует в application.conf и application_test.conf, то значение из application_test.conf переопределяет application.conf.Я ожидал этого.

application.conf

host" : somedomain.com

application_test.conf

"host" : localhost,

final configuration
"host" : localhost

Но если application_test.conf не имеет свойства host (скажем, оно имеет host2, тогда значение host становится null!

application.conf

host" : somedomain.com

application_test.conf

"host" : ,
"host2" : localhost,

final configuration
"host" : ,
"host2" : localhost,

Toмне кажется, что если host отсутствует в play.mailer, то предполагается значение null, которое впоследствии переопределяет значение из application.conf.

Вопрос 1 - это ожидаемое поведение? Вопрос 2- можно ли при создании нового configuration не указывать переопределение существующего значения, если новое значение null или отсутствует?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...