I'm trying to run unit tests with Robolectric in Android Studio. I'm almost there - I see:
!!! JUnit version 3.8 or later expected:
java.lang.RuntimeException: Stub!
at junit.runner.BaseTestRunner.<init>(BaseTestRunner.java:5)
at junit.textui.TestRunner.<init>(TestRunner.java:54)
at junit.textui.TestRunner.<init>(TestRunner.java:48)
at junit.textui.TestRunner.<init>(TestRunner.java:41)
at com.intellij.rt.execution.junit.JUnitStarter.junitVersionChecks(JUnitStarter.java:185)
...
I see also all required dependencies in class path. To fix this error I need to put junit4 dependency before android sdk dependency. Unfortunately I don't see module in Project Structure section and I don't know how to edit iml file to archive this.
Here is screenshot from my project structure:
My gradle file:
sourceSets {
testLocal {
java.srcDir file('src/test/java')
resources.srcDir file('src/test/resources')
}
}
dependencies {
// compatibility
compile 'android.compatibility:android-support:v4-r13'
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
testLocalCompile 'junit:junit:4.11'
testLocalCompile 'org.robolectric:robolectric:2.2'
testLocalCompile 'org.easytesting:fest-assert-core:2.0M10'
}
android {
buildToolsVersion "17"
compileSdkVersion 18
productFlavors {
testLocal{
}
}
}
And I selected testLocal flavour in AS.
The problem seems to be due to how Android Studio rewrites `.iml files. According to pivotal/robolectric/deckard-gradle devs:
Source: https://github.com/robolectric/deckard-gradle
Apparently you can edit these files by hand but AS will rewrite them each time you sync the project. Alternatively (the deckard devs state), you could use IntelliJ IDEA for a more stable solution.
These is currently also a long discussion on the Robolectric Google group:
https://groups.google.com/forum/#!topic/robolectric/xsOpEwtdTi4
Hopefully the AS team will fix this soon. Running Robolectric and Espresso together would be a huge step forward for testing on Android.
With Android Studio 0.5.7 it is possible to keep order of dependencies through "Project Structure" dialog or just putting line
androidTestCompile 'junit:junit:4.+'
at the top fodependencies
section.However this is not enough to run tests inside Android Studio. The new error is:
So it looks like my junit dependency is not propagated to junit run. I'm trying to make it working further
Android Studio doesn't have the dependencies screen like IntelliJ does. Until google fixes that I have a workaround I came up with. You can read about it on my blog post here. Hope this helps.