Tôi muốn thêm một số tệp thử nghiệm vào thư mục thử nghiệm của mình vì tôi muốn mô phỏng một số tải tệp JSON. Vấn đề là phiên bản Robolectric cuối cùng (2.4) có vẻ như nó không tìm thấy đường dẫn tài nguyên thử nghiệm (tôi nhận được một NPE), nhưng với Robolectric 2.3 nó làm.Thư mục tài nguyên thử nghiệm với Robolectric và Gradle
Đây là cách dự án của tôi trông giống như:
Trong lớp Res (được sử dụng bởi các xét nghiệm), tôi nạp JSON cách:
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")));
}
Và đó là của tôi tệp build.gradle:
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'
}
Và đó là thông báo lỗi:
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)
Bất kỳ ý tưởng nào xảy ra với Robolectric 2.4? Hoặc là tốt hơn để quay trở lại 2.3?