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

Mat*_*hew 33 java android dalvik junit4 junit3

正如Android的文档所说,"请注意,Android测试API支持JUnit 3代码样式,但不支持JUnit 4." (测试基础).应该很清楚,JUnit 4不能与Android一起使用.

但为什么会这样呢?是因为测试是在DVM中执行的(因为Android Runtime只支持JUnit 3)?在JVM上,它本身可以选择应该使用的JUnit运行时.在DVM中这不可能吗?

Ral*_*alf 40

2015/10更新

现在可以通过AndroidJUnitRunner实现,它是Android测试支持库的一部分.简而言之,您需要在基于Gradle的项目中执行以下操作:

  1. 添加依赖项:

    dependencies {
        compile 'com.android.support:support-annotations:22.2.0'
        androidTestCompile 'com.android.support.test:runner:0.4.1'
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 指定testInstrumentationRunner:

    android {
        defaultConfig {
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用注释来标记您的测试类@RunWith(AndroidJUnit4.class).

  4. 以正常的JUnit4样式编写测试.

另请参阅Espresso设置说明.请注意,对于简单的JUnit4测试,您不需要Espresso本身.

为什么需要它

关于这个话题我在互联网上找到的信息非常少.我找到的最好的是InstrumentationTestRunner的信息.

没有什么能阻止JUnit4测试在Android设备上运行,就像任何其他Java代码一样.但是,Android测试框架还做了一些额外的工作:

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

以上是针对JUnit3的一些扩展来执行的.

这个特定于JUnit3的代码似乎是InstrumentationTestRunner的一部分,它构成了核心Android系统的一部分.但是,正如AndroidJUnitRunner所显示的那样,可以使用支持JUnit4或其他框架的自定义测试运行器.