在 运行 测试时从类路径中排除 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.xml
从 src/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
按预期工作。
我有一个本地集成测试,它使用 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.xml
从 src/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
按预期工作。