java - 是什么破坏了我的 getResourceAsStream?

标签 java android-studio classloader

我正在接管一个项目,并且必须假设测试在某些时候按照我发现它们的方式工作(归结为不应该为空):

@Test
public void testCoding() {
   assertNotNull(getClass().getResourceAsStream("/myfile.json"));
   //assertNotNull(MyTest.class.getResourceAsStream("/myfile.json"));
   //assertNotNull(MyTest.class.getClassLoader().getResourceAsStream("myfile.json"));
   //...
}

使用 src/test/resources/ 中的 myfile.jsonsrc/test/java/some/package/ 中的测试。

我尝试将 myfile.json 放入与测试相同的文件夹中,在 src/java 文件夹中,我尝试使用和不使用前导 / 以及使用 /resources 以及我在 SO 上找到的所有提示。

gradle 文件是:

    apply plugin: 'java'

    repositories {
        mavenCentral()
    }

    dependencies {
        testCompile "junit:junit:$junitVersion"
    }

我错过了什么?

<小时/>

更新:

我意识到源代码位于我们项目的开源部分,并且仅在 AS 中失败。

Here is the line that fails如果我右键单击 lt-api/src/test/java/文件夹并选择“运行所有测试”。 Gradle 控制台打印出这一行:

    Executing tasks: [:lt-api:compileJava, :lt-api:testClasses, :mbwlib:compileJava, :mbwlib:testClasses, :bitlib:compileJava, :bitlib:testClasses]

正在运行 ./gradlew clean :lt-api:compileJava :lt-api:testClasses :mbwlib:compileJava :mbwlib:testClasses :bitlib:compileJava :bitlib:testClasses

不会触发错误,但也不会运行测试。 (我怎么知道AS到底在做什么?我以为AS现在一直在做gradle呢?)

正在运行

    ./gradlew clean :lt-api:test

我让测试运行(添加拼写错误会导致测试失败),但它不会触发我最初遇到且我想了解的问题。

文件应该在哪里?

$ sudo updatedb
$ locate test-classes
$ locate ungargasse.json
/path/to/project/lt-api/build/resources/test/ungargasse.json
/path/to/project/lt-api/src/test/resources/ungargasse.json

最佳答案

编译代码后,请确保 myfile.json 位于测试类中。

(默认情况下,src/test/resources/中的文件编译后会自动移动到测试类中) enter image description here

在两种情况下,您可以使用不带前导“/”的 getResourceAsStream:

  1. Test.java 位于 src/test/java/some/package 中,myfile.json 位于 /test/resource

    src/test/java/some/package/Test.java
    src/test/resource/myfile.json
    
  2. Test.java 和 myfile.json 在同一个包中

    src/test/java/some/package/Test.java
    src/test/java/some/package/myfile.json
    

例如

@org.junit.Test
    public void testCoding() {
        InputStream resourceAsStream = getClass().getResourceAsStream("myfile.json");
        System.out.println(resourceAsStream);

    }

关于java - 是什么破坏了我的 getResourceAsStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44448755/

相关文章:

java - 如何在java中创建一个包含10个任意范围的表并选择适当的间隔?

android - 如何在 Android Studio/IntelliJ Idea 中添加字典以进行拼写检查

java - Flink 在检查点期间找不到 groovy 类

java - 在不同的包中类 getResourceAsStream() 资源

java - 是否可以尝试/捕获某些东西来检查是否引发了异常?

java - 无法获取 fragment 中的参数

java - 客户端的业务逻辑

android - Android Studio 中缺少 aidl

java - 无法访问android接口(interface)

java - 以编程方式确定不需要导入的 JRE 类列表