Gradle 个测试从 XML 个文件中读取
Gradle tests read from XML files
我的 junit4 测试用例从 XML 文件中读取,这些文件位于目录 "src/myTest/java/data" 下我的主测试源文件夹下。
当我执行我的测试时,我得到文件未找到异常,因为它不知道这个数据文件夹。包含这些 XML 文件的最佳方式是什么,以便在我执行测试时,gradle 能够获取这些数据文件的位置。
谢谢
更新
我将数据文件移动到资源目录,现在我可以在我的测试执行中指定我的资源目录。
task myTests(type: Test) {
testClassesDir = sourceSets.myTests.output.classesDir
classpath = sourceSets.myTests.runtimeClasspath + sourceSets.myTests.resources
}
但是当我编译我的测试时,它似乎没有将资源输出到 'build/resources/myTests' 中,我有一种感觉,这就是为什么我需要在类路径中指定资源文件夹以包含 'sourceSets.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
这样的文件
ClassLoader classLoader = CommonResourceUtil.class.getClassLoader();
InputStream stream = classLoader.getResourceAsStream( "data/pluto.xml" );
可能有更简单的方法来获取 ResourceAsStream。重点是 src/test/resources/
在测试的类路径上,因此您可以使用那里的相对路径。
我确定有更长的方法来配置 gradle 测试任务以将您自己的目录放在类路径中,但这会让每个人后来都想知道为什么它在那里而不只是在默认位置.我建议您将测试文件移至 src/test/resources/
并从那里开始计算。
默认情况下,gradle 假定您在执行测试时使用 Apache Standard Directory Layout. This layout includes a folder src/test/resources
, whose contents are 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);
}
你也可以试试这个
sourceSets {
main {
output.resourcesDir = ['src/test/resources', 'src/smokeTest/java/data']
}
}
我的 junit4 测试用例从 XML 文件中读取,这些文件位于目录 "src/myTest/java/data" 下我的主测试源文件夹下。
当我执行我的测试时,我得到文件未找到异常,因为它不知道这个数据文件夹。包含这些 XML 文件的最佳方式是什么,以便在我执行测试时,gradle 能够获取这些数据文件的位置。
谢谢
更新
我将数据文件移动到资源目录,现在我可以在我的测试执行中指定我的资源目录。
task myTests(type: Test) {
testClassesDir = sourceSets.myTests.output.classesDir
classpath = sourceSets.myTests.runtimeClasspath + sourceSets.myTests.resources
}
但是当我编译我的测试时,它似乎没有将资源输出到 'build/resources/myTests' 中,我有一种感觉,这就是为什么我需要在类路径中指定资源文件夹以包含 'sourceSets.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
ClassLoader classLoader = CommonResourceUtil.class.getClassLoader();
InputStream stream = classLoader.getResourceAsStream( "data/pluto.xml" );
可能有更简单的方法来获取 ResourceAsStream。重点是 src/test/resources/
在测试的类路径上,因此您可以使用那里的相对路径。
我确定有更长的方法来配置 gradle 测试任务以将您自己的目录放在类路径中,但这会让每个人后来都想知道为什么它在那里而不只是在默认位置.我建议您将测试文件移至 src/test/resources/
并从那里开始计算。
默认情况下,gradle 假定您在执行测试时使用 Apache Standard Directory Layout. This layout includes a folder src/test/resources
, whose contents are 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);
}
你也可以试试这个
sourceSets {
main {
output.resourcesDir = ['src/test/resources', 'src/smokeTest/java/data']
}
}