Why is JUnit 4 on Android not working? Why is JUnit 4 on Android not working? android android

Why is JUnit 4 on Android not working?


Update 2015/10

It is now possible via the AndroidJUnitRunner, which is part of the Android Testing Support Library. In short, you need to do the following in a Gradle-based project:

  1. Add the dependencies:

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

    android {    defaultConfig {        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }}
  3. Annotate your test class with @RunWith(AndroidJUnit4.class).

  4. Write your tests in normal JUnit4 style.

Also see the Espresso setup instructions. Note that you don't need Espresso itself for plain JUnit4 tests.

Why it's needed

There are very little information I could find on the internet on this topic. The best I found was the info on InstrumentationTestRunner.

There are nothing preventing JUnit4 tests from running on an Android device just like any other Java code. However, the Android test framework does some additional work:

  1. It sends test results back to your development machine over ADB.
  2. It does instrumentation (I'm not sure what exactly this involves).

The above is performed by some extensions specifically for JUnit3.

This JUnit3-specific code seems to be part of the InstrumentationTestRunner which forms part of the core Android system. However, as is evident with AndroidJUnitRunner, it is possible to use a custom test runner that supports JUnit4 or other frameworks.


An explanation (in Japanese) is here:

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

I gather that the problem arises from the implementation of InstrumentationTestRunner.

The author's solution is the AndroidJUnit4 project.