代码之家  ›  专栏  ›  技术社区  ›  Dylan Knowles

在Android 1.6上运行JUnit测试时验证错误

  •  5
  • Dylan Knowles  · 技术社区  · 14 年前

    以下是我在Android 1.6上运行的内容:

    package com.healthlogger.test;
    
    public class AllTests extends TestSuite
    {
        public static Test suite()
        {
            return new TestSuiteBuilder(AllTests.class).includeAllPackagesUnderHere().build();
        }
    }
    

    还有:

    package com.healthlogger.test;
    
    public class RecordTest extends AndroidTestCase
    {
    
        /**
         * Ensures that the constructor will not take a null data tag.
         */
        @Test(expected=AssertionFailedError.class)
        public void testNullDataTagInConstructor()
        {
            Record r = new Record(null, Calendar.getInstance(), "Data");
            fail("Failed to catch null data tag.");
        }
    }
    

    主要项目是HealthLogger。这些是从单独的测试项目(HealthLoggerTest)运行的。HealthLogger和JUnit4位于HealthLoggerTest的构建路径中。JUnit4也在HealthLogger的构建路径中。“record”类位于com.healthlogger中。

    注释掉“@test…”和“record r…”行可以运行此测试。当它们未注释时,我会得到一个verifyerror异常。这件事严重阻碍了我,为什么会这样?


    编辑:车祸后来自logcat的一些信息:

        E/AndroidRuntime( 3723): Uncaught handler: thread main exiting due to uncaught exception                     
        E/AndroidRuntime( 3723): java.lang.VerifyError: com.healthlogger.test.RecordTest       E/AndroidRuntime( 3723): at java.lang.Class.getDeclaredConstructors(Native Method)
        E/AndroidRuntime( 3723): at java.lang.Class.getConstructors(Class.java:507) E/AndroidRuntime( 3723): at  android.test.suitebuilder.TestGrouping$TestCasePredicate.hasValidConstructor(TestGrouping.java:226) 
    
    E/AndroidRuntime( 3723): at android.test.suitebuilder.TestGrouping$TestCasePredicate.apply(TestGrouping.java:215)  
    
    E/AndroidRuntime( 3723):    at android.test.suitebuilder.TestGrouping$TestCasePredicate.apply(TestGrouping.java:211) 
    
    E/AndroidRuntime( 3723):        at android.test.suitebuilder.TestGrouping.select(TestGrouping.java:170) E/AndroidRuntime( 3723):        at android.test.suitebuilder.TestGrouping.selectTestClasses(TestGrouping.java:160) 
    
    E/AndroidRuntime( 3723):        at android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:154) 
    
    E/AndroidRuntime( 3723):        at android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:115) 
    
    E/AndroidRuntime( 3723):        at android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:103) 
    
    E/AndroidRuntime( 3723):        at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:321) 
    
    E/AndroidRuntime( 3723):        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3848) 
    
    E/AndroidRuntime( 3723):        at android.app.ActivityThread.access$2800(ActivityThread.java:116) E/AndroidRuntime( 3723):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831) 
    
    E/AndroidRuntime( 3723): at android.os.Handler.dispatchMessage(Handler.java:99) 
    
    E/AndroidRuntime( 3723): at android.os.Looper.loop(Looper.java:123) E/AndroidRuntime( 3723):        at android.app.ActivityThread.main(ActivityThread.java:4203) 
    
    E/AndroidRuntime( 3723): at java.lang.reflect.Method.invokeNative(Native Method) 
    
    E/AndroidRuntime( 3723): at java.lang.reflect.Method.invoke(Method.java:521) 
    
    E/AndroidRuntime( 3723): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
    
    E/AndroidRuntime( 3723):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) E/AndroidRuntime( 3723):        at dalvik.system.NativeStart.main(Native Method)
    
    1 回复  |  直到 13 年前
        1
  •  0
  •   Dave    13 年前

    当您忘记导出测试项目的所有依赖项时,可能会发生这种情况。

    在Eclipse中,访问您的项目(主要项目和测试项目)的Java构建路径属性。转到“组织/导出”选项卡,确保选中所有依赖项(选择“全部”,可能列出的任何JRE或类路径容器除外)。