我在test-mule-flow.xml
文件夹下有一个名为src/main/app
的文件,我添加了一个单元测试:
MuleFlowTest extends FunctionalTestCase
@Override
public String getConfigResources() {
return "src/main/app/test-mule-flow.xml";
}
@Test
public void test......
实际上,当我在Eclipse(Mule Studio)和maven构建中执行时,这些测试都能正确执行,但不幸的是,这些测试在Intellij IDEA版本12中失败了。
我认为这是由classloader
引起的,在IDEA中,源文件位于target/classes
文件夹中,测试类位于target/test-classes
中,这可能是原因,但我该如何配置呢?并且它以maven方式更好,我不想手动进行一些移动配置。
感谢。
答案 0 :(得分:6)
看起来您正在使用相对文件路径来加载文件。因此实际结果将取决于JVM执行测试的目录(它是“当前”目录)。
这通常是一个坏主意。如果文件应该与应用程序捆绑在一起,则存储它是src / main / resources并使用类加载器加载它:
InputStream in = MuleFlowTest.class.getResourceAsStream("/test-mule-flow.xml"));
如果它是仅由测试使用的文件,则将其存储在src / test / resources中,并使用类加载器加载它(与上面相同)。
如果确实需要将其作为文件加载,请确保当前目录始终是正确的,或者传递一个系统属性,告诉代码它应该使用哪个基目录来创建绝对路径。
答案 1 :(得分:5)
您指定了相对路径,但未提供有关如何实际读取此路径下的文件的信息。
如果从类路径中读取它,您应该确保它在那里。使用Maven,可以在src\main\resources
或src\test\resources
下放置资源。支持Maven的IDE通常会自动将这些位置添加到类路径中。如果由于某种原因您无法将文件放入resources
或类路径中包含的其他位置,则可以在IDEA中手动配置项目的源目录。
如果从文件系统读取文件,则应在IDEA中的相应运行/调试配置中检查您的工作目录。
答案 2 :(得分:0)
Maven使用以下4个文件夹作为其类路径:
如果你想为你的测试使用任何其他文件夹(并且你有合适的理由)那么你应该为maven资源插件明确指定它,如http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html
中所述此外,您应该不在测试中使用 src 文件夹中的文件,而是使用目标(并且您不应该指定“target”,只需使用文件名),已经在JVM的类路径中。