Android的JUnit测试与java.lang.VerifyError失败 [英] Android JUnit Tests failing with java.lang.VerifyError

查看:185
本文介绍了Android的JUnit测试与java.lang.VerifyError失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

阿罗哈,

我已经在这里以下准则:

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

要为一个新的Andr​​oid项目创建一些简单的测试用例。最初的几个测试用例工作正常,但现在我无法得到任何测试运行。下面是输出我得到的一个例子:

  [2011-03-25 10点05分01秒 - 应用测试] Android的推出!
[2011-03-25 10点05分01秒 - 应用测试]亚洲开发银行运行正常。
[2011-03-25 10点05分01秒 - 应用测试]执行android.test.InstrumentationTestRunner JUnit启动
[2011-03-25 10点05分01秒 - 应用测试]自动目标模式:使用现有模拟器模拟器-5554'运行兼容AVDGalaxyTabRunning2.3
[2011-03-25 10点05分02秒 - 应用测试]应用已经部署。无需重新安装。
[2011-03-25 10点05分02秒 - 应用测试]项目依赖发现,安装:应用程序
[2011-03-25 10点05分03秒 - 应用程序]应用已经部署。无需重新安装。
[2011-03-25 10点05分03秒 - 应用测试]设备上启动仪器android.test.InstrumentationTestRunner模拟器-5554
[2011-03-25 10点05分03秒 - 应用测试]收集考试信息
[2011-03-25 10点05分06秒 - 应用测试]测试运行失败:java.lang.VerifyError

测试用例是很简单的:

  / **
 *测试的情况下,以测试一个空的输入参数到去code方法。
 *
 * /
公共无效testNullInputPerformCrcDecoding()
{
    尝试
    {
        AppProtocolDe coder.performCrcDecoding(NULL);
        失败(预期抛出:IllegalArgumentException抛出......);
    }
    赶上(抛出:IllegalArgumentException预期)
    {
        assertTrue(预期的instanceof抛出:IllegalArgumentException);
    }
    赶上(的ProtocolException VE)
    {
        失败(意外发生VisiProtocolException:+ VE);
    }
}AppProtocolDe coder.performCrcDecoding(NULL);

是一个静态方法。我已经删除了所有code从中所以它所做的一切,从字面上看是返回null。该测试总是失败与java.lang.VerifyError。

这是Android 2.3的使用Android JUnit测试亚军在Eclipse中。在

任何想法?我试着重新测试项目和各种code修改排列。

在此先感谢!

编辑(!):logcat的输出:

  D / AndroidRuntime(919):关闭VM
W / dalvikvm(919):主题ID = 1:螺纹未捕获的异常(组= 0x40015560)退出
E / AndroidRuntime(919):致命异常:主要
E / AndroidRuntime(919):java.lang.VerifyError:com.company.h1s.androidserver.test.protocol.AppProtocolDe coderTest
E / AndroidRuntime(919):在java.lang.Class.getDeclaredConstructors(本机方法)
E / AndroidRuntime(919):在java.lang.Class.getConstructors(Class.java:490)
E / AndroidRuntime(919):在android.test.suitebuilder.TestGrouping $ TestCase的predicate.hasVa​​lidConstructor(TestGrouping.java:226)
E / AndroidRuntime(919):在android.test.suitebuilder.TestGrouping $ TestCase的predicate.apply(TestGrouping.java:215)
E / AndroidRuntime(919):在android.test.suitebuilder.TestGrouping $ TestCase的predicate.apply(TestGrouping.java:211)
E / AndroidRuntime(919):在android.test.suitebuilder.TestGrouping.select(TestGrouping.java:170)
E / AndroidRuntime(919):在android.test.suitebuilder.TestGrouping.selectTestClasses(TestGrouping.java:160)
E / AndroidRuntime(919):在android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:154)
E / AndroidRuntime(919):在android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:115)
E / AndroidRuntime(919):在android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:103)
E / AndroidRuntime(919):在android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:360)
E / AndroidRuntime(919):在android.app.ActivityThread.handleBindApplication(ActivityThread.java:3210)
E / AndroidRuntime(919):在android.app.ActivityThread.access $ 2200(ActivityThread.java:117)
E / AndroidRuntime(919):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:966)
E / AndroidRuntime(919):在android.os.Handler.dispatchMessage(Handler.java:99)
E / AndroidRuntime(919):在android.os.Looper.loop(Looper.java:123)
E / AndroidRuntime(919):在android.app.ActivityThread.main(ActivityThread.java:3647)
E / AndroidRuntime(919):在java.lang.reflect.Method.invokeNative(本机方法)
E / AndroidRuntime(919):在java.lang.reflect.Method.invoke(Method.java:507)
E / AndroidRuntime(919):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
E / AndroidRuntime(919):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
E / AndroidRuntime(919):在dalvik.system.NativeStart.main(本机方法)
W / ActivityManager(61):错误的应用程序运行com.company.h1s.androidserver仪表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.AppProtocolDe coderTest
I / ActivityManager(61):强制停止包com.company.h1s.androidserver的uid = 10031
I /过程(61):发送信号。 PID:919 SIG:9
D / AndroidRuntime(911):关闭VM

我使用Maven的类依赖性。下面是我包括通过Maven的库:

  /。平方米/库/ COM /谷歌/安卓/ 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-$c$cc/commons-$c$cc/1.3/commons-$c$cc-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


解决方案

您使用任何外部罐子?这似乎是java.lang.VerifyError在我的经验,一个共同的来源。

由于这个答案意味着你可能需要重新编译他们或他们运行通过DX,使它们包含的Dalvik字节code。

修改 - 我还没有处理这个自己,我不知道Maven的方式做到这一点,但在某些时候,我认为你需要使用 DX 你的罐子:

  DX --dex --output = some.dex.jar some.jar

如果有可能,你可以尝试手动在你的罐子这样做是为了看看这实际上是这个问题,然后尝试集成到您的Maven构建之后。

Aloha,

I've been following the guidelines here:

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

To create some simple test cases for a new Android project. The first few test cases were working fine, but now I am not able to get any tests to run. Here is an example of the output I am getting:

    [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

The test case is very simple:

/**
 * 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);

is a static method. I've removed all the code from it so all it does, literally is return null. The test always fails with the java.lang.VerifyError.

This is under Android 2.3 using the Android JUnit Test runner in Eclipse.

Any ideas? I've tried recreating the test project and all sorts of permutations of code modifications.

Thanks in advance!

EDIT (!): Logcat output:

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

I am using Maven for class dependencies. Here are the libraries I am including via 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

解决方案

Are you using any external jars? This seems to be a common source of java.lang.VerifyError in my experience.

As this answer suggests you may need to recompile them or run them through dx so that they contain dalvik bytecode.

Edit - I haven't dealt with this myself, and I'm not sure about the maven way to do this, but at some point I think you need to use dx on your jars:

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

If possible you might try doing this manually on your jars to see if that's actually the problem, and then try to integrate that into your maven build afterwards.

这篇关于Android的JUnit测试与java.lang.VerifyError失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆