Gradle测试从XML文件中读取

时间:2015-05-28 15:15:36

标签: java junit gradle

我的junit4测试用例从位于“src / myTest / java / data”目录下的主测试源文件夹下的XML文件中读取。

当我执行测试时,我得到文件未找到异常,因为它不知道这个数据文件夹。包含这些XML文件的最佳方法是什么,因此当我执行测试时,gradle能够获取这些数据文件的位置。

感谢

更新

我将数据文件移动到资源目录,现在我可以在测试执行中指定我的资源目录。

task myTests(type: Test) {
    testClassesDir = sourceSets.myTests.output.classesDir
    classpath = sourceSets.myTests.runtimeClasspath + sourceSets.myTests.resources
}

但是当我编译我的测试时,似乎没有将资源输出到'build / resources / myTests'中,我感觉这就是为什么我需要在类路径中指定resources文件夹以包含'sourceSets.myTests。资源'否则它将从构建路径中获取它。

sourceSets {
    myTests {
        java {
            compileClasspath += main.output + test.output
            runtimeClasspath += main.output + test.output
        }
        resources {
            include "*.xml"
            output.resourcesDir 'build/resources/myTests'
        }
    }
}

task myTest(type: Test) {
    testClassesDir = sourceSets.myTests.output.classesDir
    classpath = sourceSets.myTests.runtimeClasspath + sourceSets.myTests.resources
}

3 个答案:

答案 0 :(得分:0)

默认情况下,Gradle期望src/test/resources/的测试资源。如果你有一个像src/test/resources/data/pluto.xml

这样的文件
ClassLoader classLoader = CommonResourceUtil.class.getClassLoader();
InputStream stream = classLoader.getResourceAsStream( "data/pluto.xml" );

getResourceAsStream可能有一种更简单的方法。点src/test/resources/位于测试的类路径上,因此您可以使用相对路径。

我确信有一种更长的方法来配置gradle测试任务以将您自己的目录放在类路径上,但是这会让所有人后来想知道为什么它在那里而不仅仅是在默认位置。我建议您将测试文件移到src/test/resources/并从那里开始处理。

答案 1 :(得分:0)

默认情况下,gradle假定您使用Apache Standard Directory Layout组织了项目。此布局包含一个文件夹src/test/resources,当您执行测试时,其内容为put on the classpath

因此,在测试中包含这些xml文件的最简单方法是遵循该布局并将其放在src/test/resources中。根据您的构建方式,src/smokeTest/resources也可能有效。

然后,您可以按this教程中的说明访问资源。基本上,访问此类文件的最简单方法如下(从教程中复制):

public InputStream getResourceAsStream(String name) {
  name = resolveName(name);
  ClassLoader cl = getClassLoader();
  if (cl==null) {
    return ClassLoader.getSystemResourceAsStream(name); // A system class.
  }
  return cl.getResourceAsStream(name);
}

public java.net.URL getResource(String name) {
  name = resolveName(name);
  ClassLoader cl = getClassLoader();
  if (cl==null) {
    return ClassLoader.getSystemResource(name);  // A system class.
  }
  return cl.getResource(name);
}

答案 2 :(得分:0)

你也可以试试这个

imshow(data, interpolation='bicubic')