【问题标题】:jmockit mockup, getting error java.lang.NoSuchFieldError: $MMBjmockit 模型,出现错误 java.lang.NoSuchFieldError: $MMB
【发布时间】:2016-02-08 17:40:29
【问题描述】:

我正在尝试使用 Android 平台模拟应用程序。许多类使用超类,它们是我的单元测试无法访问的 Android 类的一部分,这就是为什么我认为使用 JMockit 可以解决我的问题的原因。请注意,我也在使用

org.mockito.Mock 和 org.powermock。

这是我尝试在课堂上使用 Mockup 进行的一个简单测试:

// ---------------------------------------
public class Bar {
    public void bar() {
        System.out.println("Bar#bar()");
    }

    public void doSomething() {
        System.out.println("do something!");
    }
}

public class BarChild extends Bar {
    public void BarChild() {
        System.out.println("BarChild#bar()");
    }

    public void Call1() {
        doSomething();
    }
}
// ---------------------------------------

@Test
public void testMockUp() throws Exception {

   new MockUp<Bar>() {

        @mockit.Mock
        public void doSomething(){
            System.out.println("do something else");
        }
    };

    BarChild obj1 = new BarChild();
    obj1.Call1();

}

// ---------------------------------------

这不起作用。它会产生以下错误:

java.lang.NoSuchFieldError: $MMB at com.gtechna.officer.ui.widget.CheckableLinearLayoutTest$Bar.doSomething(CheckableLinearLayoutTest.java) 在 com.gtechna.officer.ui.widget.CheckableLinearLayoutTest$BarChild.Call1(CheckableLinearLayoutTest.java:77) 在 com.gtechna.officer.ui.widget.CheckableLinearLayoutTest.testIsChecked(CheckableLinearLayoutTest.java:110) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68) 在 org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:310) 在 org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:88) 在 org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:96) 在 org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:294) 在 org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:127) 在 org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82) 在 org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282) 在 org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86) 在 org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49) 在 org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207) 在 org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146) 在 org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:120) 在 org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:33) 在 org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:45) 在 org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:118) 在 org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:104) 在 org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53) 在 org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:53) 在 org.junit.runner.JUnitCore.run(JUnitCore.java:160) 在 com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78) 在 com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212) 在 com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

我感觉缺少依赖项。

有什么帮助吗?

【问题讨论】:

    标签: java jmockit


    【解决方案1】:

    我在项目中的许多测试中遇到了类似的问题,对我来说,它只是在我的 gradle 构建脚本中将 jmockit 依赖项从 1.23 版升级到 1.28 版,尝试升级它也可以解决你的问题

    【讨论】:

      猜你喜欢
      • 2016-04-27
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      • 2021-01-06
      • 2011-09-11
      • 1970-01-01
      相关资源
      最近更新 更多