在 运行 测试时从类路径中排除 src/main/resources

Exclude src/main/resources from classpath when running tests

我有一个本地集成测试,它使用 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.

读取

最终,您的测试将测试项目生成的 jar/war 中包含的所有内容。这包括已编译的 类 和资源。所以对我来说,src/main/resources 在测试类路径上是完全合理的。

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

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

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

每个包含:

<configuration>
</configuration>

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