【问题标题】:Android + jmockit: java.lang.VerifyError: mockit/internal/startup/StartupAndroid + jmockit: java.lang.VerifyError: mockit/internal/startup/Startup
【发布时间】:2018-12-28 13:45:41
【问题描述】:

当我尝试使用 jmockit(version1.8) 从日历类更改为模拟类时,出现以下错误。

有人知道怎么解决吗?任何帮助将不胜感激。

谢谢,


CalendarMock.java

import java.util.Calendar;
import java.util.GregorianCalendar;

import mockit.*;

public final class CalendarMock extends MockUp<Calendar> {
   @Mock
   public static Long getInstance() { return new GregorianCalendar(2000, 0, 1, 0, 0, 0).getTimeInMillis(); }
}

DummyTest.java

public void testDummy() throws Exception {
    new CalendarMock();
}

错误日志

java.lang.VerifyError: mockit/internal/startup/Startup
at mockit.MockUp.<clinit>(MockUp.java:85)
at com.hoge.testDummy(DummyTest.java:)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)

【问题讨论】:

  • 您是否在 Dalvik VM 上运行测试? JMockit 使用了 Dalvik 上没有的java.lang.instrument API,所以它不能在这个环境中工作;您需要使用 JVM。
  • @Rogério 谢谢!真的吗!?是的,我正在尝试在 Android 上使用 JMockit。如何在 Dalvik VM 上使用 mock?
  • 您必须使用其他可以在 Dalvik VM 中运行的模拟工具。 JMockit 仅适用于 JVM。

标签: java android junit jmockit jmock


【解决方案1】:

回答有点晚了,但它对其他用户很有用,我认为如果你想使用 jmokit,你也必须使用 robolectric,这样你就可以在不在 Dalvik 的 JVM 上运行测试,或者你可以改变框架和使用mikito for android。

【讨论】:

    【解决方案2】:

    在JVM参数中将-Xverify设置为none,如下所示,这将禁用java字节码验证:

     -Xverify\:none 
    

    Xverify:Reference.

    如果可行,您将找到问题的根本原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-24
      • 2023-03-23
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 2021-07-15
      相关资源
      最近更新 更多