2015-04-01 2 views
32

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

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 
    } 
+0

Нам нужно больше информации. Добавьте код, объясните, чего вы пытаетесь достичь. Единица тестирования сериализатора JSON (de)? –

ответ

73

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

Чтобы сделать это, вам нужно добавить к вашему build.gradle:

testCompile 'org.json:json:20140107'

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

testCompile files('libs/json.jar') 

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

+9

Кажется, теперь вы можете использовать Gradle, поэтому 'testCompile 'org.json: json: 20140107'' в порядке. –

+0

Почему вы говорите, что вытаскивание из центрального центра не работает? –

+0

@IgorGanapolsky, похоже, снова работает, поэтому я обновлю ответ –

3

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

Из документации:

The android.jar file that is used to run unit tests does not contain any actual code - that is provided by the Android system image on real devices. Instead, all methods throw exceptions (by default).

We are aware that the default behavior is problematic when using classes like Log or TextUtils and will evaluate possible solutions in future releases.

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

+0

Таким образом, нет возможности использовать JSON в простых тестах Junit? –

0
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 

}

+0

Можем ли мы получить больше объяснений по этому поводу? – RousseauAlexandre

Смежные вопросы