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
или отсутствует?