当同时使用Spy和PowerMock时抛出RuntimeException

问题描述 投票:0回答:1

当我在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)

junit powermock spy
1个回答
0
投票

我将模仿内核升级到2.8.9并将powermock升级到1.7.4后解决了此问题,>

© www.soinside.com 2019 - 2024. All rights reserved.