我首先爲我的應用程序創建了一個功能測試,它工作正常。 然後我添加了單元測試(使用Robolectric + Roboguice + Mockito),它們也工作正常。然而,現在我的功能測試甚至無法啓動,拋出異常像Caused by: java.lang.NoClassDefFoundError: com.bla.bla.MainActivity
單元和功能測試的Gradle項目
我花了幾個小時(和運氣讀取提示某處的提示,但我失去了它,我不能鏈接到它),我需要檢查logcat輸出以獲取真實信息。這指出有很多問題,因爲代碼是使用Robolectric的影子類編譯的...所以要解決這個問題,我想我需要創建兩個單獨的任務(或至少一個新的),它們將分開處理單元測試的編譯和功能測試的編譯。
我的單元測試是:
\src\androidTest\java\com\bla\bla\tests
和我的功能測試(希望這將是測試推出)是:
\src\androidTest\java\com\bla\bla\tests\functional
那麼,什麼是必要的步驟,履行呢? 我想我需要創建新的sourceSet,但如何判斷哪些文件應該在那裏,並且我是否只需要測試文件(僅在\ src \ androidTest \ java \ com \ bla \ bla \ tests \ functional中)或者我需要也是應用程序的源文件。 我一直在尋找類似quickstart的例子,記錄了一些東西,以便我可以輕鬆消化它(因爲我已經在這個問題上失去了一天),但沒有成功。也許我不是在尋找正確的關鍵字,所以如果你知道這樣的事情,一個鏈接也會很有幫助。
這裏是我的build.gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 19
buildToolsVersion "19.1.0"
defaultConfig {
minSdkVersion 17
targetSdkVersion 17
applicationId "com.bla.bla"
testApplicationId "com.bla.bla.tests"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
sourceSets {
instrumentTest.setRoot('src/androidTest')
}
packagingOptions {
exclude 'LICENSE.txt'
}
}
dependencies {
androidTestCompile files('libs/robolectric-2.4-jar-with-dependencies.jar')
androidTestCompile files('libs/robotium-solo-5.2.1.jar')
androidTestCompile 'junit:junit:4.11'
androidTestCompile files('libs/javax.inject-1.jar')
androidTestCompile files('libs/jsr305-1.3.9.jar')
androidTestCompile files('libs/mockito-core-1.9.5.jar')
androidTestCompile files('libs/roboguice-2.0.jar')
compile files('libs/weberknecht.jar')
compile files('libs/gson-2.2.4.jar')
compile files('libs/javax.inject-1.jar')
compile files('libs/guice-3.0-no_aop.jar')
compile files('libs/roboguice-2.0.jar')
}
我使用:
- 過Android Studio 0.8.10
- com.android.tools.build:gradle:0.12.2 (我猜這是Android gradle插件)
- gradle 1.12
你如何編譯和組裝測試apk?用** assembleDebugTest **任務? – helleye 2014-09-25 06:45:22
是的,對不起,忘了最重要的部分,這是你如何使用它!事實上,assembleeDebugTest會編譯測試apk,但是您可能需要執行以下任務:'gradlew test'僅運行單元測試,'gradlew connectedAndroidTest'運行測試。理論上,「gradlew check」應該運行所有這些,但我認爲還沒有設置任務依賴關係。稍後我會添加它。 – 2014-09-25 10:03:11
其實對不起,'gradlew檢查'不應該運行儀器測試,只有單位和皮棉檢查。所以沒問題。 – 2014-09-25 12:53:47