6

我在文件夹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方式更好,我不想手动在idea中进行一些移动配置。

谢谢。

4

3 回答 3

6

您指定了一个相对路径,但您没有提供有关如何从该位置实际读取文件的详细信息。

如果它是从类路径中读取的,则应确保包含该文件。在 Maven 中,有一个约定将资源放入src\main\resourcesorsrc\test\resources中。支持 Maven 的 IDE 通常会自动将这些位置添加到类路径中。如果由于某种原因您无法将文件保存resources在类路径中或其他位置,您可以在 IDEA 中手动配置项目的源目录。

如果文件是从文件系统读取的,您应该检查您在 IDEA 中相应的运行/调试配置中设置的工作目录。

于 2013-05-20T06:39:34.323 回答
6

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

这通常是一个坏主意。如果该文件应该与应用程序捆绑在一起,请将其存储在 src/main/resources 并使用类加载器加载它:

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

如果它是一个仅供您的测试使用的文件,请将其存储在 src/test/resources 中,并使用类加载器加载它(同上)。

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

于 2013-05-20T06:34:21.167 回答
3

Maven 使用以下 4 个文件夹作为其类路径:

  • src/main/java - 目标/类中的输出
  • src/main/resources - 目标/类中的输出
  • src/test/java - 目标/测试类中的输出
  • src/test/resources - 目标/测试类中的输出

如果您想使用任何其他文件夹进行测试(并且您有充分的理由),那么您应该为 maven 资源插件明确指定它,如http://maven.apache.org/plugins/maven-resources-中所述插件/示例/资源目录.html

此外,您不应测试中使用src文件夹中的文件,而应使用目标中的文件(也不应指定“目标”,只需使用文件名),它已经在 J​​VM 的类路径中。

于 2013-05-20T08:13:37.280 回答