正如 Android 的文档所说,“请注意,Android 测试 API 支持 JUnit 3 代码风格,但不支持 JUnit 4。” (Testing Fundamentals)。应该清楚的是,JUnit 4 不能在 Android 中开箱即用。
但是为什么会这样呢?是因为测试是在 DVM 中执行的(因为 Android 运行时只支持 JUnit 3)?在 JVM 上,它自己可以选择应该使用的 JUnit 运行时。这在 DVM 中是不可能的吗?
最佳答案
2015/10 更新
现在可以通过Android Testing Support Library 中的AndroidJUnitRunner 来实现。 .简而言之,在基于 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)
注释您的测试类。- 以正常的 JUnit4 风格编写测试。
另见 Espresso setup instructions .请注意,普通的 JUnit4 测试不需要 Espresso 本身。
为什么需要它
我在互联网上能找到的关于这个主题的信息非常少。我找到的最好的是 InstrumentationTestRunner 上的信息.
没有什么可以阻止 JUnit4 测试像任何其他 Java 代码一样在 Android 设备上运行。然而,Android 测试框架做了一些额外的工作:
- 它通过 ADB 将测试结果发送回您的开发机器。
- 它进行检测(我不确定这具体涉及什么)。
以上是由一些专门针对 JUnit3 的扩展执行的。
这段特定于 JUnit3 的代码似乎是 InstrumentationTestRunner 的一部分,它构成了核心 Android 系统的一部分。但是,从 AndroidJUnitRunner 可以看出,可以使用支持 JUnit4 或其他框架的自定义测试运行器。
关于java - 为什么 Android 上的 JUnit 4 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9809180/