Java 从XML文件读取的Gradle测试

Java 从XML文件读取的Gradle测试,java,junit,gradle,Java,Junit,Gradle,我的junit4测试用例从位于src/myTest/java/data目录下的主测试源文件夹下的XML文件中读取 当我执行我的测试时,我得到文件未找到异常,因为它不知道这个数据文件夹。包含这些XML文件的最佳方式是什么,这样当我执行测试时,gradle就能够了解这些数据文件的位置 谢谢 更新 我将数据文件移动到资源目录,现在可以在测试执行中指定我的资源目录 task myTests(type: Test) { testClassesDir = sourceSets.myTests.out

我的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文件夹以包含“sourceset.myTests.resources”,否则它就已经从构建路径中获取了它

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
}

默认情况下,Gradle期望测试资源位于src/test/resources/。如果您有一个类似src/test/resources/data/pluto.xml的文件

可能有一种更简单的方法来获取ResourceAsStream。这一点是src/test/resources/位于测试的类路径上,因此您可以从那里使用相对路径


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

默认情况下,gradle假设您已使用。此布局包括一个文件夹src/test/resources,其内容在您执行测试时显示

因此,在测试中包含这些xml文件的最简单方法是遵循该布局并将它们放置在src/test/resources中。根据您配置构建的方式,src/smokeTest/resources也可以工作

然后,您可以访问教程中描述的资源。基本上,访问此类文件的最简单方法是从教程中复制以下内容:

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);
}
你也可以试试这个

源集{ 主要{ output.resourcesDir=['src/test/resources','src/smokeTest/java/data'] } }
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);
}