【问题标题】:Use different configuration file for integration tests使用不同的配置文件进行集成测试
【发布时间】:2014-06-22 08:36:03
【问题描述】:

我有一个定义了集成测试配置的 sbt 项目。构建.scala:

  lazy val root =
    Project("root", file("."))
      .configs( IntegrationTest )
      .settings( Defaults.itSettings : _*)

build.sbt 有(除其他外):

    libraryDependencies ++=Seq(
      "org.scalatest" % "scala-test_2.10" % "1.0.8" % "test,it",
      "com.typesafe" % "config" % "1.2.0")

现在我在src/main/resources 下有一个reference.conf 文件:

resources {
    postgresAdapter {
        db = "prod"
    }
}

同样在src/it/resources:

resources {
    postgresAdapter {
        db = "integration"
    }
}

我有以下课程:

class PostgresAdapter{
  private val db = ConfigFactory.load.getConfig("resources").getString("postgresAdapter.db")

  private def connection: Try[java.sql.Connection] = {
    val _ = classOf[org.postgresql.Driver]
    Try(DriverManager.getConnection(s"jdbc:postgresql://dbserver/$db", "user", "password"))
  }
}

如果我做sbt run,我希望dbprod 初始化,当我做sbt it:test 时用integration 初始化。 是否可以配置 sbt 和/或 Typesafe 配置以产生这种效果,或者我应该为此使用不同的方式?

PS:我想避免在投入生产的配置文件中包含 db_proddb_integration 参数。

【问题讨论】:

  • 您能否详细说明“配置”的含义?在 sbt 术语中,IntegrationTest(又名it)和Test 都称为配置。您的意思是根据配置生成相似但略有不同的文件吗?
  • 查看更新的问题。希望它更有意义
  • 好的,现在对我来说很有意义。您在询问是否可以根据不同的 sbt 配置使用不同的 Typesafe 配置文件。 REAME 说“首先列出的优先级更高”。上述设置的当前行为是什么?不接"integration"吗?

标签: scala sbt typesafe-config


【解决方案1】:

我认为你可能有一个 sbt 问题(没有让你的两个文件夹在类路径上或没有以正确的顺序)或者你可能有一个类型安全配置问题(它没有读取类路径上的两个 reference.conf )。

Typesafe Config 指定从类路径加载这两个的顺序:https://github.com/typesafehub/config/blob/master/HOCON.md#conventional-configuration-files-for-jvm-apps

您可以使用klass.getClassLoader().getResources("reference.conf") 来查看您的两个reference.conf 出现的顺序。如果您首先拥有src/it/resources,它应该覆盖src/main/resources,我认为这是您想要的?

如果你在类路径上没有reference.conf,那么你有一个 sbt 问题(或者至少,你的第一个问题是 sbt),你需要在类路径上获取那个额外的文件夹。

还有其他方法可以使用 Typesafe Config 来处理这个问题,例如加载额外的资源(如果存在),如 ConfigFactory.parseResources("testing.conf") 并用它覆盖设置,或者在 jvm 命令行上分叉集成测试和设置系统属性,如 @ 987654329@ ...我相信还有其他创造性的解决方案,只是取决于你想要什么。

我会把它做成一个 wiki,如果你的问题是 sbt 问题,Eugene 可能会解决你的问题!

(如果 Typesafe Config 未按规定工作,请在 https://github.com/typesafehub/config/issues 提交错误)

【讨论】:

  • 哈!它实际上正在工作。我没有按预期看到结果的原因是我和truncate table 在测试执行后删除了结果的语句。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-05-06
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
相关资源
最近更新 更多