Android unit test не издевается

Я следил за этим руководством https://sites.google.com/a/android.com/tools/tech-docs/unit-testing-support но я застрял в этой ошибке:

junit.framework.AssertionFailedError: Exception in constructor: testSaveJson (java.lang.RuntimeException: Method put in org.json.JSONObject not mocked. See https://sites.google.com/a/android.com/tools/tech-docs/unit-testing-support for details.

Я модифицировал конструкцию Gradle, как говорится в руководстве, но это не имеет значения.

 testOptions { 
    unitTests.returnDefaultValues = true
  }

Ответ 1

JSON поставляется вместе с Android SDK, так что вы просто загляните в тупик. Вы можете достать JSON jar, который предоставит реальные объекты для использования.

Для этого вам нужно добавить это в ваш build.gradle:

testImplementation 'org.json:json:20140107'

Кроме того, вы можете скачать и включить банку.

testCompile files('libs/json.jar')

Обратите внимание, что последняя версия JSON создана для Java 8, поэтому вам нужно взять 20140107

Ответ 2

Я думаю, вы пытаетесь запустить тесты с org.json.JSONObject, который является частью Android Framework на чистом jUnit.

Из документов:

Файл android.jar, который используется для запуска модульных тестов, не содержит никакого реального кода, который предоставляется изображением системы Android на реальных устройствах. Вместо этого все методы генерируют исключения (по умолчанию).

Мы знаем, что поведение по умолчанию является проблематичным при использовании таких классов, как Log или TextUtils, и оценивает возможные решения в будущих выпусках.

Вам нужно подражать среде Android, которую вы можете использовать для этой цели Robolectric или InstrumentationTests

Ответ 3

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

}