【发布时间】: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)
我感觉缺少依赖项。
有什么帮助吗?
【问题讨论】: