我有一个使用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
读取。
答案 0 :(得分:2)
最终,您的测试将测试项目产生的jar / war中包含的所有内容。这包括已编译的类和资源。因此,src/main/resources
位于测试类路径上对我来说非常有意义。
我建议您将src/main/resources
从hbase-site.xml
移至src/main/resources
或类似文件,而不是从src/non-test/resources
中排除特定文件。然后,您可以在jar中包含此文件夹,但将其从测试类路径中删除
答案 1 :(得分:0)
针对此特定情况(使用HBaseTestingUtility
)的解决方法是为src/main/resources
中存在的每个Hadoop XML文件创建空白文件。就我而言,我将以下文件添加到src/test/resources
:
每个包含:
<configuration>
</configuration>
空白文件优先于src/main/resources
中的空白文件,HBaseTestingUtility
按预期工作。