2011-03-25 47 views
3

阿羅哈失敗,Android的JUnit測試與java.lang.VerifyError的

我一直在關注這裏的準則:

http://developer.android.com/resources/tutorials/testing/helloandroid_test.html

要爲新的Android項目創建一些簡單的測試案例。前幾個測試用例工作正常,但現在我無法運行任何測試。這是我得到的輸出的例子:

[2011-03-25 10:05:01 - application-tests] Android Launch! 
[2011-03-25 10:05:01 - application-tests] adb is running normally. 
[2011-03-25 10:05:01 - application-tests] Performing android.test.InstrumentationTestRunner JUnit launch 
[2011-03-25 10:05:01 - application-tests] Automatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'GalaxyTabRunning2.3' 
[2011-03-25 10:05:02 - application-tests] Application already deployed. No need to reinstall. 
[2011-03-25 10:05:02 - application-tests] Project dependency found, installing: application 
[2011-03-25 10:05:03 - application] Application already deployed. No need to reinstall. 
[2011-03-25 10:05:03 - application-tests] Launching instrumentation android.test.InstrumentationTestRunner on device emulator-5554 
[2011-03-25 10:05:03 - application-tests] Collecting test information 
[2011-03-25 10:05:06 - application-tests] Test run failed: java.lang.VerifyError 

測試用例是非常簡單的:

/** 
* Test case to test a null input parameter to the decode method. 
* 
*/ 
public void testNullInputPerformCrcDecoding() 
{ 
    try 
    { 
     AppProtocolDecoder.performCrcDecoding(null); 
     fail("Expected IllegalArgumentException to be thrown..."); 
    } 
    catch (IllegalArgumentException expected) 
    { 
     assertTrue(expected instanceof IllegalArgumentException); 
    } 
    catch (ProtocolException ve) 
    { 
     fail("Unexpected VisiProtocolException occured: " + ve); 
    } 
} 

AppProtocolDecoder.performCrcDecoding(null); 

是一個靜態方法。我已經從它中刪除了所有的代碼,所以它的確從字面上返回null。該測試總是會因java.lang.VerifyError失敗。

這是在Android 2.3下使用Eclipse中的Android JUnit Test runner。

任何想法?我試過重新創建測試項目和各種代碼修改的排列。

在此先感謝!

EDIT(!):logcat的輸出:

D/AndroidRuntime( 919): Shutting down VM 
W/dalvikvm( 919): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
E/AndroidRuntime( 919): FATAL EXCEPTION: main 
E/AndroidRuntime( 919): java.lang.VerifyError: com.company.h1s.androidserver.test.protocol.AppProtocolDecoderTest 
E/AndroidRuntime( 919): at java.lang.Class.getDeclaredConstructors(Native Method) 
E/AndroidRuntime( 919): at java.lang.Class.getConstructors(Class.java:490) 
E/AndroidRuntime( 919): at android.test.suitebuilder.TestGrouping$TestCasePredicate.hasValidConstructor(TestGrouping.java:226) 
E/AndroidRuntime( 919): at android.test.suitebuilder.TestGrouping$TestCasePredicate.apply(TestGrouping.java:215) 
E/AndroidRuntime( 919): at android.test.suitebuilder.TestGrouping$TestCasePredicate.apply(TestGrouping.java:211) 
E/AndroidRuntime( 919): at android.test.suitebuilder.TestGrouping.select(TestGrouping.java:170) 
E/AndroidRuntime( 919): at android.test.suitebuilder.TestGrouping.selectTestClasses(TestGrouping.java:160) 
E/AndroidRuntime( 919): at android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:154) 
E/AndroidRuntime( 919): at android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:115) 
E/AndroidRuntime( 919): at android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:103) 
E/AndroidRuntime( 919): at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:360) 
E/AndroidRuntime( 919): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3210) 
E/AndroidRuntime( 919): at android.app.ActivityThread.access$2200(ActivityThread.java:117) 
E/AndroidRuntime( 919): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:966) 
E/AndroidRuntime( 919): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime( 919): at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime( 919): at android.app.ActivityThread.main(ActivityThread.java:3647) 
E/AndroidRuntime( 919): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime( 919): at java.lang.reflect.Method.invoke(Method.java:507) 
E/AndroidRuntime( 919): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
E/AndroidRuntime( 919): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
E/AndroidRuntime( 919): at dalvik.system.NativeStart.main(Native Method) 
W/ActivityManager( 61): Error in app com.company.h1s.androidserver running instrumentation ComponentInfo{com.company.h1s.androidserver.test/android.test.InstrumentationTestRunner}: 
W/ActivityManager( 61): java.lang.VerifyError 
W/ActivityManager( 61): java.lang.VerifyError: com.company.h1s.androidserver.test.protocol.AppProtocolDecoderTest 
I/ActivityManager( 61): Force stopping package com.company.h1s.androidserver uid=10031 
I/Process ( 61): Sending signal. PID: 919 SIG: 9 
D/AndroidRuntime( 911): Shutting down VM 

我使用Maven類的依賴。以下是我通過Maven提供的庫:

/.m2/repository/com/google/android/android/2.2.1/android-2.2.1.jar 
/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar 
/.m2/repository/org/apache/httpcomponents/httpclient/4.0.1/httpclient-4.0.1.jar 
/.m2/repository/org/apache/httpcomponents/httpcore/4.0.1/httpcore-4.0.1.jar 
/.m2/repository/commons-codec/commons-codec/1.3/commons-codec-1.3.jar 
/.m2/repository/org/khronos/opengl-api/gl1.1-android-2.1_r1/opengl-api-gl1.1-android-2.1_r1.jar 
/.m2/repository/xerces/xmlParserAPIs/2.6.2/xmlParserAPIs-2.6.2.jar 
/.m2/repository/xpp3/xpp3/1.1.4c/xpp3-1.1.4c.jar 
/.m2/repository/org/json/json/20080701/json-20080701.jar 
/.m2/repository/org/slf4j/slf4j-android/1.6.1-RC1/slf4j-android-1.6.1-RC1.jar 
/.m2/repository/org/slf4j/log4j-over-slf4j/1.6.1/log4j-over-slf4j-1.6.1.jar 
/.m2/repository/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar 
/.m2/repository/org/apache/mina/mina-core/2.0.0/mina-core-2.0.0.jar 
/.m2/repository/com/company/app-common/1.0-SNAPSHOT/app-common-1.0-SNAPSHOT.jar 
/.m2/repository/commons-lang/commons-lang/2.4/commons-lang-2.4.jar 
/.m2/repository/com/company/app-data/1.0-SNAPSHOT/app-data-1.0-SNAPSHOT.jar 
/.m2/repository/org/springframework/spring/2.5.6/spring-2.5.6.jar 
+0

您可以發佈完整的類定義 – zode64 2011-03-25 20:17:53

+0

也進入logcat的複製任何接近看起來可疑 – zode64 2011-03-25 20:19:02

+0

什麼呢構造的樣子爲您的測試類 – zode64 2011-03-25 20:45:29

回答

1

您是否在使用任何外部罐子?根據我的經驗,這似乎是java.lang.VerifyError的常見來源。

由於this answer建議您可能需要重新編譯它們或通過dx運行它們,以便它們包含達爾維克字節碼。

編輯 - 我還沒有處理這個自己,我不知道Maven的方式做到這一點,但在某些時候,我認爲你需要在你的罐子使用dx

dx --dex --output=some.dex.jar some.jar 

如果可能的話,你可以嘗試在你的罐子上手工做這件事,看看它是否真的存在問題,然後嘗試將它集成到你的Maven構建中。

+0

是的,不少外部庫。我使用Maven進行依賴管理,並且已經發布了所有包含的東西。我也放入了logcat輸出,這不是非常有用。 – 2011-03-25 20:28:46

0

如果您在主項目中使用外部庫,則應將它們導出到測試中。

0

我最終做的只是刪除使用這些庫的代碼。在大多數情況下,這樣做很微不足道。

0

19.1.0升級我的生成工具21.1.2固定我的測試失敗與java.lang.VerifyError

apply plugin: 'android' 

android { 
    compileSdkVersion 19 
    buildToolsVersion '21.1.2' 
    defaultConfig { 
     minSdkVersion 15 
     targetSdkVersion 19 
     versionCode 1 
     versionName "2.0" 
     testInstrumentationRunner "android.test.InstrumentationTestRunner" 
    } 

    buildTypes { 
     release { 
      minifyEnabled true 
      debuggable false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
     debug { 
      debuggable true 
      minifyEnabled false 
      multiDexEnabled false 
      testCoverageEnabled = true 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
}