中國建設(shè)銀行網(wǎng)站u盾修改密碼seo自學(xué)網(wǎng)app
代碼單元測試問題總結(jié):
1、測試類中引用第三方j(luò)ar包類報錯
問題原因:
測試的庫中沒有包含第三方j(luò)ar包。
解決辦法:
在app下gradle中加入第三方j(luò)ar包配置: testImplementation files(‘libs/third.jar’)
2、自定義Shadow類不生效,還是提示找不到被Shadow類
問題原因:
檢查下是不是使用了PowerMock,自測使用PowerMock后Shadow不生效
解決辦法:
去掉PowerMock改用Mockito試試,或者第三方依賴都換成Shadow,我這也沒啥好的方法。
3、測試單例類,有時候單條測試用例可以跑過,但是跑整個類的單元測試的時候不通過
問題原因:
setUp方法中獲取單例對象,但是tearDown中沒有置空,每次獲取的單例對象都是一個,導(dǎo)致之前測試的設(shè)置的值還是生效的。
解決辦法:
單例類中加一個destroy方法,把單例對象sInstance置空,每條測試用例開始前執(zhí)行setUp方法,獲取一個新的對象,tearDown中執(zhí)行destroy方法。
4、使用PowerMock時報錯:Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)ClassNotFoundException
問題原因:
(1)第一種原因是Mockito和PowerMock的版本號對應(yīng)關(guān)系不對。對應(yīng)關(guān)系可參照下面博客:
PowerMock,遇到j(luò)ava.lang.ClassNotFoundException: org.mockito.cglib.proxy.MethodInterceptor
(2)沒有加前面的@PowerMockIgnore({ “org.mockito.", "org.robolectric.”, “android.*” })
5、使用PowerMock時報空指針,例如,ATest類中調(diào)用B中的方法funcD,該方法中有用到上下文報錯,Context是空。
解決辦法:PowerMockito.doNothing().when(B對象).funcD();
6、測試配置testCoverageEnabled 時,不要在release配置中,影響運行速率,需要配置在debug中。
buildTypes {debug{testCoverageEnabled true}release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}