我从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"
我尝试了几十种解决方案,我在google中发现了这个问题,但没有一个能够解决问题。
答案 0 :(得分:5)
更新:Android Studio 1.1.0已向IDE添加了JUNIT 4测试支持。查看更多:https://sites.google.com/a/android.com/tools/tech-docs/unit-testing-support。这应该可以修复STUB异常。
亚历克斯的选项之一是正确的答案:我现在在两个项目中使用它,很遗憾你必须这样做,但这就是你现在所能做的一切。
详细步骤如下:
顺便说一句,为了生成输出测试源,我必须添加
apply plugin: 'idea'
idea {
module {
testOutputDir = file('build/test-classes/debug')
}
}
到模块的build.gradle
如果在尝试使用ui时仍然出现错误,请转到android studio中包含的终端并使用./gradle clean check(或等效命令)对项目和测试运行lint检查。如果你的测试出现任何问题,你会被告知,并有可能在html页面上查看结果。
答案 1 :(得分:2)
我正在努力解决同样的问题并最终使用此解决方案(适用于Android Studio 1.0.2和Robolectric 2.4):
转到您单元的* .iml并将order-entry
与jdkType='Android SDK'
一起移动到所有其他order-entry
元素的底部(这会修复“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运行测试,而不必操纵类路径。这就是为什么我觉得这样更方便。
答案 2 :(得分:1)
问题是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排在其他所有方面。
答案 3 :(得分:0)
来自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
中答案 4 :(得分:0)
因此,为了克服Android Studio问题,很少有事情需要考虑,但很少有人可以推荐这些问题。
sourceSets { testLocal { setRoot(&#39; SRC /测试&#39;) } }
添加,我正在使用IDEA社区版,它工作正常。此外,我不需要破解.iml文件或深入了解IDE内的各种其他设置。