2013-05-20 24 views
2

时,我有一个src/main/app文件夹下的test-mule-flow.xml文件,我添加了一个单元测试:文件都没有发现使用的是IntelliJ IDEA

MuleFlowTest extends FunctionalTestCase 
@Override 
public String getConfigResources() { 
    return "src/main/app/test-mule-flow.xml"; 
} 

@Test 
public void test...... 

实际上这些测试是正确执行,当我在Eclipse中执行它(骡子工作室)以及在Maven构建,但遗憾的是这些测试失败的IntelliJ IDEA版本12.

而且我想这是由classloader造成的,IDEA,源文件是房子target/classes文件夹,测试类是房子在target/test-classes,这也许是原因,但怎么可能我配置它?并且它在maven方式下更好,我不想在手动中做一些移动配置。

谢谢。

回答

3

看起来您正在使用相对文件路径来加载文件。所以实际结果将取决于执行测试的JVM所在的目录(它是“当前”目录)。

这通常是一个坏主意。如果该文件应该接受与应用程序捆绑在一起,其存储为src /主/资源和使用类加载器加载:

InputStream in = MuleFlowTest.class.getResourceAsStream("/test-mule-flow.xml")); 

如果只有通过你的测试使用的文件,其存储在SRC /测试/资源,并使用类加载器加载它(与上面相同)。

如果您确实需要将其作为文件加载,请确保当前目录始终是正确的,或者传递系统属性,告诉代码应该使用哪个基本目录来创建绝对路径。

+0

Aaaah,我错过了文件名开头的“/”......这个答案只是我的一天。谢谢!具体例子ftw。 (这是我得到回到Java后太远了。) – Lunivore

3

您有指定的相对路径,并且您没有提供如何实际读取此路径下的文件的信息。

在从classpath读取的情况下,应确保它在那里。使用Maven有一个约定将资源置于src\main\resourcessrc\test\resources之下。 Maven知道的IDE通常会自动将这些位置添加到类路径中。如果由于某种原因,您无法将文件放入resources或包含在classpath中的其他位置,则可以在IDEA中手动配置项目的源目录。

在从文件系统中读取文件的情况下,您应该检查IDEA中相应的运行/调试配置中您作为工作目录的情况。

0

Maven使用下面4个文件夹为它的类路径:

  • 的src /主/ JAVA - 在目标/类输出
  • 的src /主/资源 - 输出在目标/类
  • 的src /测试/ JAVA - 在目标/测试类输出
  • 的src /测试/资源 - 产出的目标/测试类

如果你想使用的任何其他文件夹你的测试(和你有一个体面的理由),那么你应该明确在http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html描述指定它Maven的资源插件

此外,你应该从SRC文件夹不文件,用在您的测试,而是从目标(和你不应该指定“目标”要么,只是使用的文件名),这已经是JVM的类路径。

+0

谢谢,但有关目标,intellij 12仍然找不到目标文件夹中由apache cxf-codegen-plugin生成的类。 –

相关问题