当前位置: 首页 > 知识库问答 >
问题:

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

关宏毅
2023-03-14

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

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

下面是build.gradle的相关部分:

依赖项{testCompile组:“com.myCompany”,名称:“myConfigFile”,版本:“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运行它(Debug As->JUnit Test)时,它无法在类路径上找到该文件(因为Eclipse JUnit插件没有将其放在那里),并且该调用返回NULL。

我试着将配置从testCompile更改为compile,看看这是否有什么不同,但这并没有改变任何东西(也许很明显,即使选择了compile配置,我的.classpath也没有XML文件的任何条目)。

有没有人知道有什么办法能让这件事成功?我是不是错过了一些显而易见的东西?

共有1个答案

阎承嗣
2023-03-14

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

 类似资料:
  • 问题内容: 我刚刚在Eclipse上第一次安装了插件m2e。 我编写了一个简单的JUnit(版本4)测试。我可以从Eclipse中运行它,但不能从pom.xml中运行它(alt单击,运行方式,Maven测试)。我想我需要告诉Maven搜索该课程,但我只是不知道如何。 另外,我在groupId“ junit”中找不到JUnit 4:只有版本3.8.1可用。我真的需要为3.x版本而不是4+版本编写测试

  • 在Eclipse和Maven中运行基于SpringBoot的Java单元测试时,我得到了不同的结果。 我的测试成功地从命令行使用maven(mvn测试)运行,但在Eclipse中运行失败。 我使用与JDK相同的配置,在Eclipse中作为Maven Projekt导入。所以设置几乎相同,但结果却不一样:( 我有什么办法解决这个问题吗?或者有没有类似的问题? 其中大多数是我在使用eclipse运行测

  • null 当我在testng.xml文件中指定path时,Intellij会显示一个错误。它给了我创建类XXXX的选项。当我单击create class时,它给了我两个位置(src/main/java和src/test/java)。我已经在src/test/java下有了相应的测试类。为什么它不接受? 我试图在Mac中检查我的类路径,但没有太大成功。 任何帮助都将不胜感激。 还有一件事,我想做的是

  • 我正在为java应用程序编写junit测试用例这里是junit测试代码 在eclipse中运行这段代码后,我会收到以下错误 下面是我的主要java代码 有人能帮忙解决这个错误吗?在这里,我不能单独运行两个测试函数,它们运行得很好,如何一起运行它们

  • 我创建了一个简单的测试来尝试Junit 5: 这就是我使用的依赖关系: 堆栈跟踪是下一步: 知道哪里出了问题吗?

  • 在我的Eclipse项目(Eclipse Luna)中,我有一些JUnit测试用例,我不想在完全回归测试中运行。例如,因为它们需要用户在场以验证结果(例如,如果声音正确播放),或者因为它们只在特定系统上正确运行。这些测试大多是在对被测试类进行更改时手动使用的。我已经使用来忽略这些测试。 当我从Eclipse运行一个包含忽略测试的类(运行为->Junit测试)时,它将在测试列表中显示忽略的测试。