【发布时间】:2013-12-10 22:57:21
【问题描述】:
我正在尝试验证与 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 版本之后,看起来它们正在针对不支持 WebView.evaluateJavascript() 的 APILEVEL 14 运行。据我所知,我从未将此项目配置为以 APILEVEL 14 为目标。我应该在哪里寻找配置错误的想法?谢谢!
【问题讨论】:
标签: android gradle mockito robolectric android-4.4-kitkat