2012-12-10 24 views
6

Bir android proje için etkinliklerimi test etmek için JUnit'i kurmaya çalışıyorum.Android JUnit test ClassNotFoundException

Android Projesi (

Bunları web sitelerinden adımları uyguladıktan (Birkaç birim testleri eklemek istiyorum neden olan, sol hala birkaç hata vardır) bir AVD ve bir cihaz hem Tamam çalışır onlar az ya da çok aynı, ama hala sadece benim proje olarak aynı çalışma alanını kullanarak bir test projesi oluşturduk ve oluşturulan
http://mobile.tutsplus.com/tutorials/android/android-sdk-junit-testing/
http://developer.android.com/tools/testing/testing_eclipse.html

her şeyi doğru) yaptığından emin benim ilk olmak için hepsini kontrol test durumu. Testi çalıştırmayı denediğimde aşağıdakileri elde ettim:

[2012-12-09 19:42:56 - AssassinTest] Android Lansmanı!
[2012-12-09 19:42:56 - AssassinTest] adb normal çalışıyor.
[2012-12-09 19:42:56 - AssassinTest] android.test.InstrumentationTestRunner JUnit'in gerçekleştirilmesi
[2012-12-09 19:42:56 - AssassinTest] Otomatik Hedef Modu: Tercih edilen AVD 'Google_Level10' emülatör 'emulator-5554' üzerinde kullanılabilir '
[2012-12-09 19:42:56 - AssassinTest]' emulator-5554 'cihazına AssassinTest.apk yükleniyor'
:42:57 - AssassinTest ] AssassinTest.apk ...
yükleniyor [2012-12-09 19:42:59 - AssassinTest] Başarı!
[2012-12-09 19:42:59 - AssassinTest] Proje bağımlılığı bulundu, yüklendi: Assassin
[2012-12-09 19:43:01 - Assassin] Uygulama zaten dağıtıldı. Yeniden yüklemeye gerek yok.
[2012/12/9 19:43:01 - AssassinTest] cihaz enstrümantasyon android.test.InstrumentationTestRunner başlatma emülatörü-5554
[2012/12/9 19:43:01 - AssassinTest] Toplama test bilgileri
[ 2012/12/09 19:43:04 - AssassinTest] test çalışması başarısız oldu: Enstrümantasyon çalışması G logCat ne olsun dolayı burada 'Java.Lang.ClassNotFoundException'

Ve etmektir başarısız oldu:

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 

Birkaç forumda arama yaparken bunun bir neden olabileceğini okudum. Kötü bildirim dosyası, ama benimki

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="udes.assassin.test" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="10" /> 

<instrumentation 
    android:name="android.test.InstrumentationTestRunner" 
    android:targetPackage="udes.assassin" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <uses-library android:name="android.test.runner" /> 
</application> 
</manifest> 

Ve nihayet sorunun ne görmüyorum, bu (şimdiye kadar) benim tek JUnit sınıfta kod

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<InGameActivity> { 

    public InGameActivityTest() { 
     super("udes.assassin", InGameActivity.class); 
    } 

    public InGameActivityTest(Class<InGameActivity> activityClass) { 
     super(activityClass); 
    } 

    @Before 
    protected void setUp() throws Exception { 
     super.setUp(); 
    } 

    @Test 
    public void testSetItemPosition() { 
     fail("Not yet implemented"); 
    } 
} 

size

cevap

14
teşekkür

Muhtemelen JUnit sınıf yolunuzda değil. Project -> Properties -> Java Build Path -> Order and Export'a gidin ve JUnit kutusunun işaretli olup olmadığını kontrol edin.

0

burada aynı hata, başka bir sebep ...

Testim sınıfı isimsiz pakette ama AndroidManifest ile inconistent edildi.xml: Ben, sen @Test ek açıklama kullanmakta olduğunu fark

<instrumentation 
     android:name="android.test.InstrumentationTestRunner" 
     android:targetPackage="micharg.nameanimalthing" /> 
2

: junit4 tarafından tanıtılan oluyor

@Test 
public void testSetItemPosition() { 
    fail("Not yet implemented"); 
} 

ve junt3 dayalı android testi. Bkz. here

@Test ek açıklamalarını kaldırmalısınız.