I run tests other than Android JUnit from Eclipse every day. Today I wanted to test some of my Android library classes. Oh pain.
I have an Android library project using android-maven-plugin. I have the source files in src/main/java and my (new) unit test in src/test/java . My POM has corresponding JUnit dependencies and Android-maven-plugin links.
Sometimes I create an Android Uri instance from File . Sometimes I have an existing Java Uri instance that I created from File , which I then convert to Uri . Since I trust neither Java nor Android with files and URIs (don't start with how Java manages UNC paths in a URI or how Java breaks the equals() contract in a URI), I wanted to create a simple unit test to create a temporary file, create Uris from two different approaches and make sure they are equal.
So, I do a little JUnit unit test, as I'm used to, and try to run it in Eclipse using Ctrl+F11 . Eclipse asks me if this is the "Android JUnit Test" or the "JUnit Test". Well, Android, obviously. Therefore, I choose the first option and get:
[2013-03-23 21:37:10 - mylib] ------------------------------ [2013-03-23 21:37:10 - mylib] Android Launch! [2013-03-23 21:37:10 - mylib] adb is running normally. [2013-03-23 21:37:10 - mylib] Could not find mylib.apk!
Hmmm ... it was not very successful. Therefore, I delete the launch configuration and try simply "JUnit Test". Now I get another dialog asking me to choose my preferred launcher "Android JUnit Test Launcher" or "Eclipse JUnit Test Launcher". It doesn't matter what I choose; I get:
Class not found com.example.MyUnitTest java.lang.ClassNotFoundException: com.example.MyUnitTest at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
I read that with the android-maven plugin, I can run unit tests locally in Eclipse if they just use classes in the Android bank but don't make any API calls, which I do here. So how can I take this off?
source share