【问题标题】:Exclude src/main/resources from classpath when running tests运行测试时从类路径中排除 src/main/resources
【发布时间】:2018-03-28 14:52:55
【问题描述】:

我有一个本地集成测试,它使用HBaseTestingUtility 创建本地 HBase 测试环境。使用默认配置启动它很简单:

HBaseTestingUtility hbaseUtility = new HBaseTestingUtility();
hbaseUtility.startMiniCluster();

然后我有几个与 HBase 交互的 JUnit 测试。

但是,如果我的src/main/resources 文件夹包含hbase-site.xml,那么 HBase 实例将从那里拉入 Kerberos 配置,尝试连接到远程 HBase 实例,然后死掉。我不明白为什么会发生这种情况 - 我以为在运行测试时只有 src/test/resources 文件可用?

在运行这些测试时,如何从类路径中排除 src/main/resources?

如果有帮助,我的构建工具是 Gradle,其中没有任何配置可以告诉测试从 src/main/resources 读取。

【问题讨论】:

    标签: java gradle junit hbase


    【解决方案1】:

    最终,您的测试将测试项目生成的 jar/war 中包含的所有内容。这包括编译的类和资源。因此,src/main/resources 在测试类路径上对我来说非常有意义。

    与其从src/main/resources 中排除特定文件,我建议您将hbase-site.xml 从src/main/resources 移动到src/non-test/resources 或类似的位置。然后,您可以将此文件夹包含在 jar 中,但将其排除在测试类路径之外

    【讨论】:

      【解决方案2】:

      针对这种特定情况的解决方法(使用HBaseTestingUtility)是为src/main/resources 中存在的每个Hadoop XML 文件创建空白文件。就我而言,我将以下文件添加到src/test/resources:

      • core-site.xml
      • hbase-site.xml
      • hdfs-site.xml

      每个包含:

      <configuration>
      </configuration>
      

      空白文件优先于src/main/resources 中的文件,HBaseTestingUtility 按预期工作。

      【讨论】:

      • 可能更好的解决方案是查找${env}-core-site.xml、${env}-hbase-site.xml 等,其中${env} 是系统属性。然后,您可以为测试、UAT 和 prod 等设置不同的配置文件,每个文件都具有不依赖于类路径排序的唯一文件名
      • 是的,我想一旦我们转向生产,那么拥有多个环境就会解决这个问题。
      猜你喜欢
      • 2020-07-24
      • 2012-03-26
      • 1970-01-01
      • 2017-08-24
      • 2016-10-12
      • 2019-12-21
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      相关资源
      最近更新 更多