After ranting against Android in my previous post I have mainly solved now the untestable situation Android is producing.
Thanks to Robolectric all my tests are finally fast and do not unpredictable hang or similar!
The tests execute nearly as fast as in a normal Maven project – plus additional 2 seconds to bootstrap (dex?). Robolectric was initially made for maven integration on IntelliJ. But it works without Maven and under Eclipse as described here. I didn’t get robolectric working via Maven under Eclipse – and it was overly complex e.g. you’ll need an android maven bridge but when you use a normal Android project and a separate Java projects for the tests then it works surprisingly well for Eclipse.
Things you should keep in mind for Eclipse:
- Eclipse and Robolectric description here
- In both projects put local.properties with sdk.dir=/path/to/android-sdk
- Android dependencies should come last for the test project as well as in the pom.xml for the maven integration (see below)
But now even better: when you are doing your setup via Maven you can use NetBeans! Without any plugin – so even in the latest NetBeans version. But how is the setup done for Maven? Read this! After this you only need to open the project with NetBeans (or IntelliJ).
Things you should keep in mind for Maven and NetBeans:
- Use Maven >= 3.0.3
- Again: put the android dependencies last!
- Specify the sdk path via bashrc, pom.xml or put it into your settings.xml ! Sometimes this was not sufficient in NetBeans – then I used ANDROID_HOME=xy in my actions
- Make sure “compile on save” is disabled for tests too, as I got sometimes strange exceptions
- deployment to device can be done to:
mvn -DskipTests=true clean install # produce apk in target or use -Dandroid.file=myApp.apk in the next step
mvn -Dandroid.device=usb android:deploy # use it
- If you don’t have a the Android plugin for NetBeans just use ‘adb logcat | grep something’ for your UI to the logs
Thats it. Back to hacking and Android TDD!