为什么Android上的JUnit 4不起作用?

作为Android的文档说:“请注意,AndroidtestingAPI支持JUnit 3代码风格,但不支持JUnit 4.” ( testing基础 )。 应该清楚的是,JUnit 4不能与Android一起使用。

但是为什么这样呢? 是否因为testing在DVM中执行(因为Android运行时只支持JUnit 3)? 在JVM上,可以select应该使用的JUnit运行时。 在DVM中这不可能吗?

Related of "为什么Android上的JUnit 4不起作用?"

更新2015/10

现在可以通过AndroidJUnitRunner,这是Androidtesting支持库的一部分 。 简而言之,您需要在基于Gradle的项目中执行以下操作:

  1. 添加依赖关系:

    dependencies { compile 'com.android.support:support-annotations:22.2.0' androidTestCompile 'com.android.support.test:runner:0.4.1' } 
  2. 指定testInstrumentationRunner:

     android { defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } } 
  3. @RunWith(AndroidJUnit4.class)注释你的testing类。

  4. 用正常的JUnit4风格编写testing。

另请参阅Espresso设置说明 。 请注意,您不需要Espresso本身进行普通的JUnit4testing。

为什么这是必要的

在这个话题上,我可以在互联网上find很less的信息。 我发现的最好的是InstrumentationTestRunner的信息。

没有任何东西可以阻止JUnit4testing在Android设备上运行,就像任何其他Java代码一样。 但是,Androidtesting框架还做了一些额外的工作:

  1. 它通过ADB将testing结果发送回您的开发机器。
  2. 它做仪器(我不确定这涉及到什么)。

以上是由JUnit3的一些扩展执行的。

这个JUnit3特定的代码似乎是构成核心Android系统一部分的InstrumentationTestRunner的一部分。 然而,正如AndroidJUnitRunner显而易见的那样,可以使用支持JUnit4或其他框架的自定义testing运行器。

一个解释(在日本)是这里:

http://d.hatena.ne.jp/esmasui/20120910/1347299594

我收集到这个问题是由InstrumentationTestRunner的实现引起的。

作者的解决scheme是AndroidJUnit4项目。