Android单元测试未被模拟

4smxwvx5  于 2022-11-20  发布在  Android
关注(0)|答案(5)|浏览(192)

我遵循this guide,但遇到以下错误:
junit.framework.AssertionFailedError:构造函数中出现异常错误:运行时异常错误:方法放在org.json.JSONObject中未被模拟。有关详细信息,请参阅https://sites.google.com/a/android.com/tools/tech-docs/unit-testing-support
我按照指南所述,通过Gradle构建进行了修改,但这并没有什么区别

testOptions { 
    unitTests.returnDefaultValues = true
}
dxxyhpgq

dxxyhpgq1#

JSON与AndroidSDK捆绑在一起,所以你只需要点击一个stub。你可以拉入一个JSON jar,它将提供真实的的对象来使用。
要执行此操作,您需要将其添加到您的构建中。gradle:

testImplementation 'org.json:json:20140107'

或者,您可以下载并包含jar。

testCompile files('libs/json.jar')

请注意,JSON的最新版本是为Java 8构建的,因此您需要获取20140107。您可能还需要清理并重新构建项目。

bbmckpt7

bbmckpt72#

我认为您试图在纯jUnit上运行org.json.JSONObject测试,它是Android Framework的一部分。
来自文档:
用于运行单元测试的android.jar文件不包含任何实际代码--实际代码由真实的设备上的Android系统映像提供。相反,所有方法都会抛出异常(默认情况下)。
我们意识到,在使用Log或TextUtils等类时,默认行为是有问题的,我们将在未来的版本中评估可能的解决方案。
您需要模拟Android环境,您可以使用Robolectric或InstrumentationTests来实现此目的

jogvjijk

jogvjijk3#

您需要将以下内容添加到build.gradle:

android {
  // ...
  testOptions { 
    unitTests.returnDefaultValues = true
  }
}

dependencies {
//...
    testImplementation 'org.json:json:20180813'
}
qnzebej0

qnzebej04#

如果您使用的是KotlinDSL,中问题的解决方案:

testOptions {
    unitTests.isReturnDefaultValues = true
}

testImplementation("org.json:json:20210307")
xnifntxz

xnifntxz5#

android {

testOptions {
    unitTests.returnDefaultValues = true
} }

dependencies {
testImplementation libs.leakCanaryNoOp
testImplementation tests.jUnit
testImplementation tests.mockito
testImplementation(tests.mokitoKotlin) {
    exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib"
    exclude group: "org.jetbrains.kotlin", module: "kotlin-runtime"
    exclude group: "org.jetbrains.kotlin", module: "kotlin-reflect"
    exclude group: "org.mockito", module: "mockito-core"
}
testImplementation tests.powerMock
testImplementation tests.powerMockApiMockito
testImplementation (tests.robolectric) {
    exclude group: 'org.robolectric', module: 'robolectric-resources:'
}
testImplementation (tests.robolectricShadowsSupport){
    exclude group: 'org.robolectric', module: 'robolectric'
}
kaptTest libs.daggerCompiler

}

相关问题