是什么打破了我的getResourceAsStream?

时间:2017-06-09 03:21:12

标签: 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"));
   //...
}

myfile.json中的src/test/resources/src/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

1 个答案:

答案 0 :(得分:2)

在您编写代码后,请确保myfile.json处于test-classe中。

(默认情况下, 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
    
  3. 例如

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