我遇到了maven和JUnit测试的问题。
我在src / main / resources中有一些文件,在运行junit测试时,我想要这些文件。只有一个具有稍微不同设置的测试特定文件应该否决相应的文件。 所以我的想法是给这个测试文件提供与main-file相同的名称,并将它放在src / test / resources下的相同(相应)位置,如main-file。 但现在我遇到了问题,我无法使用src / main / resources中的所有其他文件。
我认为他们的junit测试会在默认情况下通过src / test / resources中的文件运行ernriced将它们默认为target / test-classes /,但它没有。只有src / test / resources中的文件,而不是其他文件。
感谢任何想法,我如何解决这个问题。
这里是我尝试访问文件的示例
@BeforeClass
public static void globalSetUp() throws NamingException, SQLException {
System.setProperty("solr.solr.home", "/solr/");
cores = new CoreContainer(
"/home/foo/workspace/reporting/target/test-classes/solr");
cores.load();
server = new EmbeddedSolrServer(cores, "reporting");
loadDriver();
connection = createAndConnectToDB();
createDBSchema();
}
答案 0 :(得分:23)
问题出在pom.xml中。 / main / resources不是testResource。
以下是解决我问题的摘录:
<build>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
<testResource>
<directory>${project.basedir}/src/main/resources</directory>
</testResource>
</testResources>
</build>
答案 1 :(得分:7)
实际上两者都有/可用。 src / main / resources和src / test / resources中的文件。但是,从类路径加载文件时,src / test / resources中的任何文件都优先于src / main / resources中的文件。
很难完全回答你的问题,因为你没有提供很多细节(你使用的是ContextConfiguration吗?如果不是你如何加载文件)但是我建议你使用不同的名称并明确加载该文件在一个需要它的测试中。
您也可以使用相同的名称,但是所有其他测试都需要显式使用src / main / resources路径来加载默认文件。