繁体   English   中英

使用Gradle构建从Eclipse运行JUnit测试时的类路径问题

[英]Classpath problems when running JUnit tests from Eclipse with Gradle build

我有一个Gradle项目,该项目声明XML数据文件的仅测试依赖项,然后从类路径加载该文件。 当我从命令行直接在Gradle中运行测试时,一切正常,但是当我运行“ gradlew eclipse”时,在Eclipse中刷新项目,然后尝试从Eclipse运行测试(Debug As-> JUnit Test),测试失败,因为它找不到XML文件,并且类路径(如从“调试”视图中的进程的“属性”上下文菜单项访问的)未显示XML文件包含在类路径中。

我看到的行为与http://gradle.1045684.n5.nabble.com/gradle-junit-tests-resources-and-classpath-td4418753.html#a4420758有一些共通之处,但肖恩的问题却相反:他的问题测试可以在Ant下正常运行(但他从未提及尝试直接从Eclipse JUnit插件运行),但在Gradle下却没有。

这是build.gradle的相关部分:

依赖项{testCompile组:'com.mycompany',名称:'MyConfigFile',版本:'0.0.0 + dirty',分机:'xml'}

因为URLClasspathLoader可以直接从文件系统直接加载的唯一资源是JAR,所以我正在使用以下静态方法在类路径中搜索与需要加载的文件名匹配的文件:

public static String getFullPathForResourceDirectlyOnClasspath(String nameFragment) {
    ClassLoader cl = ClassLoader.getSystemClassLoader();
    for (URL url: ((URLClassLoader)cl).getURLs()){
        String fullPath = url.getFile();
        if (fullPath.contains(nameFragment)) {
            return fullPath;
        }
    }
    return null;
}

我将该方法称为如下:

getFullPathForResourceDirectlyOnClasspath("/MyConfigFile-");

当我从Gradle(“ gradlew build”)运行该代码时,它将找到该文件,并且我的测试成功。 当我从Eclipse(调试方式-> JUnit测试)运行它时,它无法在类路径中找到该文件(因为Eclipse JUnit插件未将其放在此处),并且该调用返回null。

我尝试将配置从testCompile更改为compile,以查看是否有所不同,但它并没有改变任何内容(也许可以说,即使编译配置为true,我的.classpath也没有XML文件的任何条目)选择)。

有人知道做这项工作的方法吗? 我只是缺少一些显而易见的东西吗?

似乎您正在滥用类路径,以将单个参数(XML文件的绝对文件路径)传递给测试。 相反,您应该以正确的方式将XML文件放在(测试)类路径上(它需要进入类路径中列出的目录或Jar文件中)并正确地加载它(例如,使用getClass().getClassLoader().getResource("some/resource.xml") ),或将文件路径作为系统属性传递给测试。 自然,后者将更难在不同的环境下工作(例如Gradle build和IDE)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM