2015-04-01 36 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. 

我的搖籃修改打造像導說,但它不會有所作爲

testOptions { 
    unitTests.returnDefaultValues = true 
    } 
+0

我們需要更多的信息。添加一些代碼,解釋你想要達到的目標。單元測試一個JSON(de)序列化程序? – 2015-04-16 13:47:34

回答

73

JSON被捆綁起來了Android SDK,所以你只是被擊中存根。你可以插入一個JSON jar,它將提供真實的對象來使用。

要做到這一點,你需要添加到您的build.gradle:

testCompile 'org.json:json:20140107'

或者,您也可以下載幷包括罐子。

testCompile files('libs/json.jar') 

注意,JSON的最新版本是專爲Java的8,所以你需要抓住20140107

+9

似乎你現在可以使用Gradle,所以'testCompile'org.json:json:20140107''很好。 – 2015-06-30 16:17:19

+0

你爲什麼說從maven中央拉動不起作用? – 2016-03-24 14:57:34

+0

@IgorGanapolsky它似乎再次工作,所以我會更新答案 – 2016-03-24 15:04:16

3

我想你試圖用org.json.JSONObject運行測試,它是純粹jUnit上的Android Framework的一部分。

從文檔:

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

所以沒有辦法在純JUnit測試中使用JSON? – 2016-03-24 15:00:43

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 2017-12-27 16:01:50