AndroidX簡介:
Android 9.0(API level 28)發布時,AndroidX也作為一個新的支持庫發布出來了。AndroidX時Jetpack的一部分,它包含了現有的支持庫和最新的Jetpack組件。
AndroidX 與 Android 操作系統分開提供,並與各個 Android 版本向后兼容。AndroidX 完全取代了支持庫(android.support.v7或android.support.v4),不僅提供同等的功能,而且提供了新的庫。所以對於使用AndroidX后,不需要因為使用v4還是v7庫而煩惱了。
修改項目中的gradle.properties文件中將下面兩個屬性置為true就能完全使用AndroidX的庫了。
android.useAndroidX:使用相應的 AndroidX 庫,而非支持庫
android.enableJetifier:重寫其二進制文件,自動遷移現有的第三方庫以使用 AndroidX
更多具體信息及如何使用請到android官網查看文檔:
https://developer.android.google.cn/jetpack/androidx
Junit4:
這里簡單記錄分享下
背景:Android Studio中調試Room相關時碰到的問題(如 java.lang.ClassNotFoundException: Didn't find class "android.support.test.runner.AndroidJUnitRunner" )
Room調試中使用的是AndroidX的庫,而默認Junit使用的是非AndroidX庫,導致出現各種報錯。理清這個,修改下依賴庫即可解決問題。
1.在默認情況下,Android Studio使用的是非AndroidX支持庫中的Junit的相關庫,build.gradle(Module:app) 中關於Junit大概配置如下:
android { compileSdkVersion 28 defaultConfig { applicationId "com.flx.testjunit" minSdkVersion 27 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }
2.AndroidX庫關於Junit的配置如下。
如AndroidX簡介中所述,gradle.properties(Project Properties)中添加:
android.useAndroidX=true android.enableJetifier=true
build.gradle(Module:app) 中:
android { compileSdkVersion 28 defaultConfig { applicationId "com.flx.testjunitandroidx" minSdkVersion 27 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.0-beta01' implementation 'androidx.constraintlayout:constraintlayout:1.1.2' implementation 'com.google.android.material:material:1.0.0-beta01' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.1.0-alpha4' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4' }
修改配置后 重新Build下工程,具體類中報錯重新import對應的庫類即可。
運行Junit:
下面是簡單的示例圖片
從上面看:
(1)點擊1處的Structure即可出現2的窗口,右擊2處即可執行
(2)4和5處已經左邊有明顯的結果提示,如上”passed:1 of 2“。5處有具體報錯信息。
(3)3處有androidTes和test兩個文件夾,有什么區別呢,
androidTest/java: Android單元測試,執行測試的時候需要連接Android設備(或AVD),需要Android環境。
test/java: JUnit單元測試,不需要Android依賴,運行在當前電腦中。
下圖是便捷的創建測試:
常用斷言:
assertEquals, 預期和實際相等,不相等則拋出異常和信息
assertNotEquals, 預期和實際不相等,相等則拋出異常和信息
assertNull,傳入的為空,不為空拋出異常和信息
assertNotNull,傳入非空,為空時拋出異常和信息
assertTrue,斷言為真,如果為假(false)則拋出異常和信息
assertFalse,斷言為假,如果為真(true)則拋出異常和信息
assertSame,引用同一對象,如果不是則拋出異常和信息
assertNotSame, 引用不同對象,如果是同一對象則拋出異常和信息
下面的例子的斷言都是OK的,沒有異常: