我接管一个项目并且必须假设测试在某个时刻以我找到它们的方式工作(归结为不应该为空的):
@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
答案 0 :(得分:2)
在您编写代码后,请确保myfile.json处于test-classe中。
(默认情况下, 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);
}