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

标签 eclipse junit gradle

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

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

这是build.gradle的相关部分:

dependencies { testCompile group: 'com.mycompany', name: 'MyConfigFile', version: '0.0.0+dirty', ext: '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)。

关于eclipse - 使用Gradle构建从Eclipse运行JUnit测试时的类路径问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19101423/

相关文章:

java - 无法使用 eclipse 调试器进行调试

java - Apache tomcat 还是 apache ant?

android - Eclipse:奇怪的语法错误

java - 如何从 junit 中的 java 扩展文件中读取和测试类?我怎样才能访问该类进行测试?

使用一种公共(public)方法的 java/jUnit 测试类

spring-boot - 将 gradle 多项目转换为 springboot fat jar 应用程序

java - 在Gradle文件中使用名称有问题的.so库

eclipse - 控制台在Eclipse Juno中消失

java - 断言具有嵌套 Map 字段的两个对象不相等

android - 如何使用 Android Studio 0.3.0 导入新模块(android 库项目)