android - 为什么我的单元测试针对的是错误版本的Android?

标签 android gradle mockito robolectric android-4.4-kitkat

我试图验证与WebView控件交互的代码是否正确将Javascript调用传递给WebView,但是我的单元测试未正确执行。似乎测试是针对错误版本的Android运行的。

我的测试:

@Test
public void testJavascript() {
  // myObj will pass its argument as a string to a WebView control referenced in the
  // test as mWebView
  myObj.callJavascript("some code"); // passes to a WebView control

  // Using Mockito to verify calls to mocked WebView
  verify(mWebView).evaluateJavascript(anyString(), any(ValueCallback.class));
}

我的目标系统是Android 4.4,并使用Gradle构建系统。我是Gradle的新手,可能正在搞砸。据我所知,Maven Central尚未安装Android 4.4,因此我正在使用Android Studio安装中的本地.jar文件。

从build.gradle:
android {
  compileSdkVersion 19
  defaultConfig {
    minSdkVersion 9
    targetSdkVersion 19
  }
}

sourceSets {
  unitTest {
    java.srcDir file('src/test/java')
    resources.srcDir file('src/test/res')
  }
}

configurations {
  unitTestCompile.extendsFrom runTime
  unitTestRuntime.extendsFrom unitTestCompile
}

dependencies {
  unitTestCompile files("$project.buildDir/classes/release")
  unitTestCompile 'junit:junit:4.11'
  unitTestCompile 'org.robolectric:robolectric:2.2'
  unitTestCompile 'org.mockito:mockito-core:1.9.5'
  unitTestCompile files('../libs/android-19.jar') // From Android Studio
}

task unitTest(type:Test, dependsOn:assemble) {
  testClassesDir = project.sourceSets.unitTest.output.classesDir
  classpath = project.sourceSets.unitTest.runtimeClasspath
}
check.dependsOn unitTest

tasks.withType(Test) {
  scanForTestClasses = false
  include "**/*Tests.class"
}

当我尝试通过gradle unitTest运行测试时,出现了我无法理解的错误:
com.example.Tests > testCallJavascript FAILED
java.lang.NoSuchMethodError: android.webkit.WebView.evaluateJavascript(Ljava/lang/String;Landroid/webkit/ValueCallback;)V
    at com.exampleTests.testCallJavascript(Tests.java:...)

更新:

好的,在添加调试println以检查测试所针对的SDK版本之后,看起来它们正在针对APILEVEL 14(不支持WebView.evaluateJavascript())运行。据我所知,我从未将这个项目配置为以APILEVEL 14为目标。我应该在哪里找出配置错误的想法?谢谢!

最佳答案

Robolectric尚不支持API-19。如果使用了无效的API目标,Robolectric默认为API-14。

另请:https://groups.google.com/forum/#!msg/robolectric/LBOgSkD5O9U/qooiA_xDv_4J

关于android - 为什么我的单元测试针对的是错误版本的Android?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20507121/

相关文章:

android - 水平居中包装器 DIV 在 Android 中不起作用

android - AAPT2 错误 : this error happened as soon as I updated my android studio to the latest version

java - java-library 插件的 api 配置无法识别

bash - 即使在我的路径上,也无法从命令行执行gradle

java - 重置 Mockito spy

java - 为什么 Mockito.when(...).thenThrow(...) 直接抛出错误

java - 验证使用不同参数调用方法的顺序

java - Android 中的输入验证

android - 如何在sqlite中删除数据库?

android - Gradle flavors 和 main 中重复类的解决方法