【问题标题】:Can't jUnit test with file from resources folder无法使用资源文件夹中的文件进行 jUnit 测试
【发布时间】:2018-05-29 16:22:42
【问题描述】:

我正在尝试使用位于 src/test/resources 下的文件进行单元测试,但是当我尝试读取它时,我无法始终获得空指针。

我正在使用带有 JDK 10 和 Gradle 的 Spring Boot 2.0.2。

我尝试了在谷歌上搜索问题时发现的许多代码变体,但都没有成功。

我的 build.gradle 看起来像这样:

buildscript {
     ext {
        springBootVersion = '2.0.2.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.moc.omc'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 10

repositories {
    mavenCentral()
    jcenter()
}
dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.boot:spring-boot-devtools")
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("javax.xml.bind:jaxb-api:2.3.0")
    compile("com.h2database:h2")
    compile("io.springfox:springfox-swagger2:2.9.0")
    compile("io.springfox:springfox-swagger-ui:2.9.0")
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

我的测试是这些行的一些变体(我尝试过的都没有成功):

@Test
public void isSortedCorrectly() throws IOException {
    ClassLoader classLoader = getClass().getClassLoader();
    File file = new File(classLoader.getResource("test-file.json").getFile()); // java.lang.NullPointerException
}

测试类在这里:

src\test\java\com\moc\omc\x\y\MyUnitTest.java

测试文件在这里:

src\test\java\resources\test-file.json

【问题讨论】:

  • 您需要File,还是可以使用InputStream?因为您无法通过ClassLoader.getResource 可靠地加载文件。另外,在文件名前加上/
  • 我无法让它工作。它似乎引用了src/main/.../resources 而不是src/test/resources。如果我运行这段代码,它会给我src/main/.../resources 文件夹中的文件。

标签: java spring gradle


【解决方案1】:

文件需要在

src\test\resources\test-file.json

代替

src\test\java\resources\test-file.json 

【讨论】:

  • 好点。但它仍然不起作用。奇怪的是,如果我输入File file = new File(classLoader.getResource("application.yml").getFile());,它将引用src/main/.../resources。有什么想法吗?
【解决方案2】:

根据您的 IDE,您的资源目录可能不在类路径中。

在 IntelliJ 中:

  1. 右键单击您的 test/resources(或 test/java/resources)目录
  2. 选择“将目录标记为...”子菜单
  3. 选择“测试资源根”
  4. 这个目录将出现一个装饰器图形,表示它在类路径中

在 Eclipse 中:

  1. 转到“运行->运行配置...”(如果是调试“运行->调试” 配置...")
  2. 打开您使用的运行(调试)配置
  3. 打开“类路径”选项卡
  4. 选择“用户条目”并点击右侧的“高级...”
  5. 在打开的窗口中选择“添加文件夹”,指向您的 src/test/resources
  6. 此文件夹将出现在“用户条目”下,然后您应该将其向上移动以使其成为类路径中的第一个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多