正如Android的文档所说,“请注意,Android测试API支持JUnit 3代码样式,但不支持JUnit 4。” (Testing Fundamentals)。应该很清楚,JUnit 4不能与Android一起使用。
但为什么会这样呢?是因为测试是在DVM中执行的(因为Android Runtime只支持JUnit 3)?在JVM上,它本身可以选择应该使用的JUnit运行时。在DVM中这不可能吗?
答案 0 :(得分:40)
更新2015/10
现在可以通过AndroidJUnitRunner实现,它是Android Testing Support Library的一部分。简而言之,您需要在基于Gradle的项目中执行以下操作:
添加依赖项:
dependencies {
compile 'com.android.support:support-annotations:22.2.0'
androidTestCompile 'com.android.support.test:runner:0.4.1'
}
指定testInstrumentationRunner:
android {
defaultConfig {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
使用@RunWith(AndroidJUnit4.class)
注释您的测试类。
另见Espresso setup instructions。请注意,对于简单的JUnit4测试,您不需要Espresso本身。
为什么需要
我在互联网上找到的关于这个主题的信息非常少。我找到的最好的是关于InstrumentationTestRunner的信息。
没有什么能阻止JUnit4测试在Android设备上运行,就像任何其他Java代码一样。但是,Android测试框架还做了一些额外的工作:
以上是针对JUnit3的一些扩展执行的。
这个特定于JUnit3的代码似乎是InstrumentationTestRunner的一部分,它构成了核心Android系统的一部分。但是,正如AndroidJUnitRunner所显示的那样,可以使用支持JUnit4或其他框架的自定义测试运行器。
答案 1 :(得分:2)
解释(日文)在这里:
http://d.hatena.ne.jp/esmasui/20120910/1347299594
我认为问题源于InstrumentationTestRunner
的实施。
作者的解决方案是AndroidJUnit4项目。