![](/img/trans.png)
[英]Android Studio with Robolectric: my class test is not found
[英]Android Studio + Robolectric + Gradle Class Not Found Exception
我從https://github.com/robolectric/deckard-gradle下載了Robolectric deckard-gradle項目並導入到Android Studio。
在我第一次跑步時,我得到了
!!! JUnit version 3.8 or later expected:
java.lang.RuntimeException: Stub!
at junit.runner.BaseTestRunner.<init>(BaseTestRunner.java:5)
at junit.textui.TestRunner.<init>(TestRunner.java:54)
at junit.textui.TestRunner.<init>(TestRunner.java:48)
at junit.textui.TestRunner.<init>(TestRunner.java:41)
錯誤,我從.iml修復此問題。
然后我得到了:
Class Not Found "my test class"
我嘗試了幾十種解決方案,我在谷歌中發現了這個問題,但沒有一個有效。
更新:Android Studio 1.1.0為IDE添加了JUNIT 4測試支持。 有關詳情,請訪問: https : //sites.google.com/a/android.com/tools/tech-docs/unit-testing-support 。 這應該修復STUB異常。
Alex的選項之一是正確答案:我現在在兩個項目中使用它,很遺憾你必須這樣做,但這就是你現在所能做的一切。
詳細步驟如下:
順便說一句,為了生成輸出測試源,我必須添加
apply plugin: 'idea'
idea {
module {
testOutputDir = file('build/test-classes/debug')
}
}
到模塊的build.gradle
如果在嘗試使用ui時仍然出現錯誤,請轉到android studio中包含的終端並使用./gradle clean check(或等效命令)對項目和測試運行lint檢查。 如果您的測試出現任何問題,您將收到通知,並可以在html頁面上查看結果。
我正在努力解決同樣的問題,並最終使用此解決方案(適用於Android Studio 1.0.2和Robolectric 2.4):
轉到模塊的* .iml並將帶有jdkType='Android SDK'
的order-entry
移動到所有其他order-entry
jdkType='Android SDK'
的底部(這將修復“Stub”-issue)。
此外,在* .iml文件中添加以下output-test
,直接進入下面的output
-元素。 它應該如下所示:
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" /> <output-test url="file://$MODULE_DIR$/build/test-classes" />
這對我來說很完美。 現在我可以直接從Android Studio運行測試,而不必操縱類路徑。 這就是為什么我覺得這樣更方便。
問題是Android Studio會經常重寫您的.iml文件,所以即使您修改了它,它也可能會被更改回來。
選項1 :為Android Studio破解它
你可以做的是在測試運行時將類路徑設置為VM選項,並將路徑放到JUnit 4的前面。
在您的測試運行配置中,對於VM選項,添加-classpath
然后是JUnit的路徑,然后是類路徑的其余部分(當您嘗試運行測試時,您可以從Android Studio輸出中獲取此信息並且它失敗,它位於第一行您從中復制郵件的輸出。
例如:
-classpath "/Users/anothem/.gradle/caches/artifacts-26/filestore/junit/junit/4.11/jar/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar:[the rest of your classpath]
選項2:使用IntelliJ
這不是一個真正的修復,但我想我會提到它。 如果你真的不想繼續使用Android Studio,你可以使用IntelliJ(Android Studio的“爸爸”)。
使用IntelliJ,您可以打開項目設置,只需重新排序包,以便JUnit4和Robolectric排在其他所有方面。
來自nemo的評論已經指出了它。 您可以修改您的iml文件。 (不好這個文件經常從android studio重寫)我使用自定義gradle任務在android studio中啟用單元測試。 修改iml文件並將路徑更改為測試運行的預期路徑。 有時我必須運行我的測試兩次以使其運行,因為android studio僅在下次測試運行時進行更改,而不是當前。
這是一個完整的示例,可以包含在您的gradle文件中https://github.com/nenick/android-gradle-template/blob/master/Scripts/android-studio-robolectric-support.gradle
因此,為了克服Android Studio問題,幾乎沒有什么可以考慮的事情,但很少有人可以推薦做法。
sourceSets {testLocal {setRoot('src / test')}}
只是補充一下,我正在使用IDEA社區版,它運行正常。 此外,我不需要破解.iml文件或深入了解IDE內的各種其他設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.