Я хочу добавить некоторые тестовые файлы в свою тестовую папку, потому что хочу имитировать загрузку некоторых файлов JSON. Проблема в том, что последняя версия Robolectric (2.4) выглядит так, что она не находит путь тестовых ресурсов (я получаю NPE), но с Robolectric 2.3 он делает.Папка тестовых ресурсов с Robolectric и Gradle
Это как мой проект выглядит следующим образом:
В классе Res (используется при испытаниях), я загружаю JSON таким образом:
public static String str(String path) throws IOException {
InputStream is = null;
try {
is = Res.class.getResourceAsStream(path); // "is" IS NULL!
return new String(ByteStreams.toByteArray(is)); // ERROR HERE
} finally {
if (is != null) {
is.close();
}
}
}
public static JsonReader json(String path) throws IOException {
return new JsonReader(new StringReader(str("/contact.json")));
}
И это мой build.gradle file:
buildscript {
// ...
dependencies {
classpath 'org.robolectric:robolectric-gradle-plugin:1.0.1'
}
}
apply plugin: 'com.android.application'
apply plugin: 'org.robolectric'
robolectric {
// ...
include '**/*Test.class'
ignoreFailures true
// ...
}
android {
compileSdkVersion 21
buildToolsVersion "22"
defaultConfig {
applicationId "com.ph"
minSdkVersion 15
targetSdkVersion 21
versionCode 9
versionName '4.1'
}
sourceSets {
androidTest {
setRoot('src/test')
res.srcDirs = [ 'src/test/resources' ]
}
test {
setRoot('src/test')
res.srcDirs = [ 'src/test/resources' ]
}
}
}
dependencies {
compile 'com.android.support:support-v4:22.0.0'
compile 'joda-time:joda-time:2.7'
compile 'com.google.guava:guava:18.0'
compile files('libs/gcm.jar')
compile 'org.codehaus.jackson:jackson-core-asl:1.9.13'
compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
compile 'org.slf4j:slf4j-api:1.7.10'
compile 'com.jakewharton:butterknife:6.1.0'
provided 'com.squareup.dagger:dagger-compiler:1.2.2'
compile 'com.squareup.dagger:dagger:1.2.2'
// ================== TESTING LIBRARIES ======================
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.10.19'
testCompile ('org.robolectric:robolectric:2.4') {
exclude module: 'classworlds'
exclude module: 'commons-logging'
exclude module: 'httpclient'
exclude module: 'maven-artifact'
exclude module: 'maven-artifact-manager'
exclude module: 'maven-error-diagnostics'
exclude module: 'maven-model'
exclude module: 'maven-project'
exclude module: 'maven-settings'
exclude module: 'plexus-container-default'
exclude module: 'plexus-interpolation'
exclude module: 'plexus-utils'
exclude module: 'wagon-file'
exclude module: 'wagon-http-lightweight'
exclude module: 'wagon-provider-api'
}
testCompile 'com.squareup:fest-android:1.0.+'
testCompile 'org.bouncycastle:bcprov-jdk15on:1.50'
testCompile 'com.jakewharton:butterknife:6.1.0'
testCompile 'com.google.android:android:4.1.1.4'
}
И вот сообщение об ошибке:
java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:210)
at com.google.common.io.ByteStreams.copy(ByteStreams.java:65)
at com.google.common.io.ByteStreams.toByteArray(ByteStreams.java:115)
at com.ph.Res.str(Res.java:17)
at com.ph.Res.json(Res.java:26)
at com.ph.SyncTest.testContact(SyncTest.java:182)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:236)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:158)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Любая идея, что не так с Robolectric 2.4? Или лучше откат до 2,3?