从 XML 文件读取的 Gradle 测试
Posted
技术标签:
【中文标题】从 XML 文件读取的 Gradle 测试【英文标题】:Gradle tests read from XML files 【发布时间】:2015-05-28 15:15:36 【问题描述】:我的 junit4 测试用例从位于“src/myTest/java/data”目录下的主测试源文件夹下的 XML 文件中读取。
当我执行我的测试时,我得到了 file not found 异常,因为它不知道这个数据文件夹。包含这些 XML 文件的最佳方式是什么,以便在我执行测试时,gradle 能够获取这些数据文件的位置。
谢谢
更新
我将数据文件移动到资源目录,现在我可以在我的测试执行中指定我的资源目录。
task myTests(type: Test)
testClassesDir = sourceSets.myTests.output.classesDir
classpath = sourceSets.myTests.runtimeClasspath + sourceSets.myTests.resources
但是当我编译我的测试时,它似乎没有将资源输出到“build/resources/myTests”中,我觉得这就是为什么我需要在类路径中指定资源文件夹以包含“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
【问题讨论】:
【参考方案1】:你也可以试试这个
sourceSets
main
output.resourcesDir = ['src/test/resources', 'src/smokeTest/java/data']
【讨论】:
【参考方案2】: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/
并从那里解决。
【讨论】:
【参考方案3】:默认情况下,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);
【讨论】:
以上是关于从 XML 文件读取的 Gradle 测试的主要内容,如果未能解决你的问题,请参考以下文章