2014-02-19 76 views
10

如何輕鬆地將單元測試添加到Android Studio(IntelliJ)中的Android項目中?使用Android Studio和Gradle進行單元測試?

更確切地說:我想添加一個包含測試代碼(JUnit 4)的文件夾,並使用常規安裝的JDK(不是在Android模擬器中)從那裏執行單元測試。 到目前爲止,我加入了文件夾「測試/ JAVA /」我的模塊,並增加了「測試」作爲源組和JUnit作爲測試依賴性:

sourceSets { 
    instrumentTest.setRoot('src/test') 
} 

dependencies { 
    instrumentTestCompile 'junit:junit:4.+' 
    // ... 
} 

當我現在選擇運行「所有測試」在測試/ java文件夾,它給了我一個UnsupportedOperationException。

我錯過了什麼?你如何運行Android項目的單元測試?

插件的建議獎勵積分在Eclipse中像'Infinitest'一樣工作 - 我可以簡單地保存一個類,並且它的單元測試會自動執行。 :-)

PS:我不想使用https://github.com/JakeWharton/gradle-android-test-plugin,因爲該插件似乎已被棄用。

回答

1

我想答案應該是現在已經在Android Studio中1.1 (和當前gradle插件)。 他們引入了單元測試支持。 它仍然是實驗性的,但比我們以前在這裏的努力更少:) 請參閱here

+0

這就是實際的解決方案!最後他們建立了真正的單元測試支持。另外,JUnit 4.x!他們從android.jar中刪除了所有'final'類,所以我們也可以嘲笑Android的東西! :-D – mreichelt

3

我已經在過去的幾個星期(也)。其實,就類固醇而言,因爲我也不得不把Robolectric放進鍋裏。簡而言之:除非我將這個錯誤與其他東西混淆,否則我認爲您正在嘗試使用Android testrunner運行單元測試。

長答案: 我結束了棄用的插件(嘗試之後,然後試圖把測試放入androidTest文件夾),因爲它解決了我在Jenkins上的一些問題。 缺點是它不會將文件夾本身識別爲java或android代碼,因此代碼完成適用於除文件夾內容外的所有內容(例如,它正確地看到基礎項目和所有依賴項)。

我在Android Studio中運行它的原因是創建了一個JUnit(而不是Android)testrunner。 它可能無法正常工作,因爲classpath順序已經搞亂了(儘管它只需在gradle中運行測試就可以正常工作)。

基本上手動步驟我必須做的是:

    1. 才能看到AS
    2. 編輯-classpath參數執行以下操作使用的命令行運行JUnit的TestRunner

    3. 移動junit> 3。8字符串的頂部(我猜是因爲否則你將得到的android內的一個,這也太舊)
    4. 移動robolectric爲第二,如果你引用它,否則真正的Android方法將robolectric問題之前找到
    5. 你的測試類輸出路徑追加到最後,所以它會找到你的測試(記得「測試」來結束你的測試類,否則他們不會被發現)
  • 附加您剛剛創建到了-classpath亞軍VM選項後-ea (我發現這個解決方案,或其中的一部分,在很多地方,很好的一個是:http://kostyay.name/android-studio-robolectric-gradle-getting-work/它也適用於簡單的單元測試)。

  • 另一種我沒有嘗試,但我認爲今天早上已經建議(見最後發表的帖子): https://groups.google.com/forum/#!topic/adt-dev/Y8-ppkWell0

    我有很多零散的知識的,現在由於許多問題我發現由於預覽SW,我不得不去通過解決他們噸的信息,但如果你對主題的更多具體問題,只是讓我知道:)

    +1

    未在最新的Gradle插件中將'instrumentTest'替換爲'androidTest'嗎? –

    +0

    更新了我的答案,謝謝。然而,這個答案在AS中進行單元測試的所有工作都很快過時了(儘管由於我沒有找到任何穩定的解決方案,我仍然停留在棄用的插件上)。 – cowst

    相關問題