2014-09-24 60 views
0

我首先爲我的應用程序創建了一個功能測試,它工作正常。 然後我添加了單元測試(使用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

回答

0

我在GitHub中創建了一個項目(主要供個人使用,但隨意複製它)。 https://github.com/tas-morf/AndroidUnitTestTemplate 它有單元測試(Robolectric和Mockito)和儀器測試(用Espresso)。作爲獎勵,它也與凌空結合。我只是用它,因爲它可以幫助我開始我的大部分項目,但是那裏的構建腳本和文件夾結構應該回答你的問題。我還列出了幫助實現這一目標的其他項目的所有鏈接。請記住,這是一項正在進行的工作。

+0

你如何編譯和組裝測試apk?用** assembleDebugTest **任務? – helleye 2014-09-25 06:45:22

+0

是的,對不起,忘了最重要的部分,這是你如何使用它!事實上,assembleeDebugTest會編譯測試apk,但是您可能需要執行以下任務:'gradlew test'僅運行單元測試,'gradlew connectedAndroidTest'運行測試。理論上,「gradlew check」應該運行所有這些,但我認爲還沒有設置任務依賴關係。稍後我會添加它。 – 2014-09-25 10:03:11

+0

其實對不起,'gradlew檢查'不應該運行儀器測試,只有單位和皮棉檢查。所以沒問題。 – 2014-09-25 12:53:47