当我在JUnit测试用例中将Spy注释与PowerMock一起使用时,它将引发RuntimeException,但是当我将Mock注释与PowerMock一起使用时,该测试用例可以正常工作。有人能为我的问题提供建议吗?
这是我的代码
@RunWith(PowerMockRunner.class)
@PrepareForTest({DBConnectionPool.class})
@PowerMockIgnore("javax.management.*")
public class TestAbcController {
private static final Logger logger = Logger.getLogger(TestAbcController .class.getName());
public TestAbcController () {
}
@Spy
private SampleDao mockDao;
@InjectMocks
private AbcController ctr;
private BasicDataSource ds = null;
private MockMvc mockMvc;
@BeforeClass
public static void setUpClass() {
logger.setLevel(Level.INFO);
PowerMockito.mockStatic(DBConnectionPool.class);
PowerMockito.when(DBConnectionPool.getDataSource()).thenReturn(UnitTestDbConnection.getDataSource());
}
@Test
public void testMain() {
when(mockDao.getMap()).thenReturn(new HashMap());
}
下面是例外的详细信息
java.lang.RuntimeException:在以下位置调用beforeTestMethod方法PowerMock测试监听器org.powermock.api.extension.listener.AnnotationEnabler@d86a6f失败。在org.powermock.api.mockito.internal.configuration.PowerMockitoSpyAnnotationEngine.process(PowerMockitoSpyAnnotationEngine.java:53)在org.powermock.api.mockito.internal.configuration.PowerMockitoInjectingAnnotationEngine.process(PowerMockitoInjectingAnnotationEngine.java:32)在org.powermock.api.extension.listener.AnnotationEnabler.injectSpiesAndInjectToSetters(AnnotationEnabler.java:60)在org.powermock.api.extension.listener.AnnotationEnabler.beforeTestMethod(AnnotationEnabler.java:55)在org.powermock.tests.utils.impl.PowerMockTestNotifierImpl.notifyBeforeTestMethod(PowerMockTestNotifierImpl.java:90)在org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:292)在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:87)在org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:50)在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:34)在org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)在org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:122)在org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:106)在org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)在org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59)在org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)在org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)在org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
我将模仿内核升级到2.8.9并将powermock升级到1.7.4后解决了此问题,>