【问题标题】:Gradle tests read from XML files从 XML 文件读取的 Gradle 测试
【发布时间】: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
}

【问题讨论】:

    标签: java junit gradle


    【解决方案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);
        }
        

        【讨论】:

          猜你喜欢
          • 2021-08-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-04
          • 2013-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多