title: Android JUnit testing ClassNotFoundException
body: <p>I'm trying to setup JUnit to test my activities for an android project.  </p>
  
  <p>The Android Project runs ok on both an AVD and a device (there are still a few bugs left, which is why I want to add a few unit tests)</p>
  
  <p>I followed the steps from these websites (they are more or less the same, but I still checked all of them just to make sure I did everything correctly)<br>
  <a href="http://mobile.tutsplus.com/tutorials/android/android-sdk-junit-testing/" rel="noreferrer">http://mobile.tutsplus.com/tutorials/android/android-sdk-junit-testing/</a><br>
  <a href="http://developer.android.com/tools/testing/testing_eclipse.html" rel="noreferrer">http://developer.android.com/tools/testing/testing_eclipse.html</a>  </p>
  
  <p>I created a test project using the same workspace as my project, and created my first test case. When I tried to run the test, I got the following:</p>
  
  <blockquote>
    <p>[2012-12-09 19:42:56 - AssassinTest] Android Launch!<br>
    [2012-12-09 19:42:56 - AssassinTest] adb is running normally.<br>
    [2012-12-09 19:42:56 - AssassinTest] Performing android.test.InstrumentationTestRunner JUnit launch<br>
    [2012-12-09 19:42:56 - AssassinTest] Automatic Target Mode: Preferred AVD 'Google_Level10' is available on emulator 'emulator-5554'<br>
    [2012-12-09 19:42:56 - AssassinTest] Uploading AssassinTest.apk onto device 'emulator-5554'<br>
    [2012-12-09 19:42:57 - AssassinTest] Installing AssassinTest.apk...<br>
    [2012-12-09 19:42:59 - AssassinTest] Success!<br>
    [2012-12-09 19:42:59 - AssassinTest] Project dependency found, installing: Assassin<br>
    [2012-12-09 19:43:01 - Assassin] Application already deployed. No need to reinstall.<br>
    [2012-12-09 19:43:01 - AssassinTest] Launching instrumentation android.test.InstrumentationTestRunner on device emulator-5554<br>
    [2012-12-09 19:43:01 - AssassinTest] Collecting test information<br>
    [2012-12-09 19:43:04 - AssassinTest] Test run failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'  </p>
  </blockquote>
  
  <p>And here is what I get from LogCat:</p>
  
  <pre><code>12-09 19:43:02.929: E/dalvikvm(1255): Unable to resolve Ludes/assassi/test/InGameActivityTest; annotation class 19
  12-09 19:43:02.929: D/AndroidRuntime(1255): Shutting down VM
  12-09 19:43:02.929: W/dalvikvm(1255): threadid=1: thread exiting with uncaught exception (group=0x40015560)
  12-09 19:43:02.961: E/AndroidRuntime(1255): FATAL EXCEPTION: main
  12-09 19:43:02.961: E/AndroidRuntime(1255): java.lang.NoClassDefFoundError: org.junit.Test
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at java.lang.reflect.Method.getDeclaredAnnotations(Native Method)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at java.lang.reflect.Method.getDeclaredAnnotations(Method.java:262)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at java.lang.reflect.AccessibleObject.getAnnotations(AccessibleObject.java:188)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at java.lang.reflect.AccessibleObject.getAnnotation(AccessibleObject.java:196)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at android.test.suitebuilder.TestMethod.getAnnotation(TestMethod.java:60)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:39)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:30)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at com.android.internal.util.Predicates$OrPredicate.apply(Predicates.java:106)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:42)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:31)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at com.android.internal.util.Predicates$NotPredicate.apply(Predicates.java:122)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at android.test.suitebuilder.TestSuiteBuilder.satisfiesAllPredicates(TestSuiteBuilder.java:254)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:184)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:373)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3246)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at android.app.ActivityThread.access$2200(ActivityThread.java:117)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:969)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at android.os.Handler.dispatchMessage(Handler.java:99)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at android.os.Looper.loop(Looper.java:130)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at android.app.ActivityThread.main(ActivityThread.java:3683)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at java.lang.reflect.Method.invokeNative(Native Method)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at java.lang.reflect.Method.invoke(Method.java:507)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at dalvik.system.NativeStart.main(Native Method)
  12-09 19:43:02.961: E/AndroidRuntime(1255): Caused by: java.lang.ClassNotFoundException: org.junit.Test in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/system/framework/android.test.runner.jar:/data/app/udes.assassin.test-1.apk:/data/app/udes.assassin-2.apk]
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
  12-09 19:43:02.961: E/AndroidRuntime(1255):     ... 25 more
  </code></pre>
  
  <p>While searching on a few forums, I read that this might be caused by a bad manifest file, but I don't see what is wrong with mine</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="udes.assassin.test"
  android:versionCode="1"
  android:versionName="1.0" &gt;
  
  &lt;uses-sdk android:minSdkVersion="10" /&gt;
  
  &lt;instrumentation
      android:name="android.test.InstrumentationTestRunner"
      android:targetPackage="udes.assassin" /&gt;
  
  &lt;application
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name" &gt;
      &lt;uses-library android:name="android.test.runner" /&gt;
  &lt;/application&gt;
  &lt;/manifest&gt;
  </code></pre>
  
  <p>And finally, this is the code in my only JUnit class (so far)</p>
  
  <pre><code>package udes.assassin.test;
  import static org.junit.Assert.*;
  import org.junit.Before;
  import org.junit.Test;
  import udes.assassin.InGameActivity;
  import android.test.ActivityInstrumentationTestCase2;
  
  public class InGameActivityTest 
          extends ActivityInstrumentationTestCase2&lt;InGameActivity&gt; {
  
      public InGameActivityTest() {
          super("udes.assassin", InGameActivity.class);
      }
  
      public InGameActivityTest(Class&lt;InGameActivity&gt; activityClass) {
          super(activityClass);
      }
  
      @Before
      protected void setUp() throws Exception {
          super.setUp();
      }
  
      @Test
      public void testSetItemPosition() {
          fail("Not yet implemented");
      }
  }
  </code></pre>
  
  <p>Thank you</p>