【问题标题】:Cant access a file from /resource-folder in a JUnit-Test无法从 JUnit-Test 中的 /resource-folder 访问文件
【发布时间】:2021-09-21 19:44:55
【问题描述】:
  1. 总结问题:

我正在使用 JUnit 5 测试 Spring-Rest/MVC-Api(没有 Spring-Boot)。 我有一个类 CatRepositoryBackUpRepo,我在那里读写一个文件,我链接到 private File datei = new File("Cats.json");。这个文件在 src/main/resource.当我运行程序时,这工作正常。我用 println-Logging-Text 检查了它。 当我想在 Junit-test-Class 中测试这个读取方法时(链接在最后),它没有找到文件,并抛出一个文件未找到异常。

  1. 描述您尝试过的内容:

我创建了一个 /src/test/resource-folder 并将相同的文件放在那里,但没有用。然后我使用测试类编写了这样一个文件,并将其放置在与项目路径上的 /src-Folder 和 pom.xml 相同的级别。似乎运行测试类时资源路径的属性是问题,但我不知道如何修复它,如何告诉被测类正确的属性。 我在 IntelliJ Ultimate Edit 中使用 Junit 运行测试用例。Junit 的运行配置的工作目录设置为 $MODULE_WORKING_DIR$

  1. 添加一些代码

这是被测类,被测方法readCats() https://github.com/IngmarEckhardt/RestControl/blob/master/src/main/java/de/cats/restcat/service/CatRepositoryBackupRepo.java

这是测试类,唯一不起作用的方法是readCats_withHDDready_shouldReturnArrayList()

https://github.com/IngmarEckhardt/RestControl/blob/master/src/test/java/de/cats/restcat/service/CatRepositoryBackupRepoTest.java

【问题讨论】:

标签: java junit


【解决方案1】:

我自己解决了这个问题,如果有人搜索,我会分享解决方案。

问题是,spring-mvc-Framework 使用一个类加载器从类路径中获取资源,而这个类加载器在后台调用new File("Cats.json") 调用。

但显然这不适用于测试类。我现在用

显式调用 Classloader
ClassLoader classLoader = getClass().getClassLoader();
File datei = new File(classLoader.getResource("Cats.json").getFile());

而不仅仅是使用

File datei = new File("Cats.json");

这解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多