我正在接管一个项目,并且必须假设测试在某些时候按照我发现它们的方式工作(归结为不应该为空):
@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.json
和 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
最佳答案
编译代码后,请确保 myfile.json 位于测试类中。
(默认情况下,src/test/resources/中的文件编译后会自动移动到测试类中)
在两种情况下,您可以使用不带前导“/”的 getResourceAsStream:
Test.java 位于
src/test/java/some/package
中,myfile.json 位于/test/resource
src/test/java/some/package/Test.java src/test/resource/myfile.json
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/