0

我需要模拟以下代码:

final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
mbs.registerMBean(testMBean, new ObjectName("testObjectName");

我使用 PowerMock 来模拟 ManagementFactory 并使用以下代码片段:

  1. 在课堂上,我配置了:

    @RunWith(PowerMockRunner.class) @PrepareForTest({ ManagementFactory.class })

  2. 创建 Mock MBeanServer 类:

    MBeanServer mockMBeanServer = createMock(MBeanServer.class);

  3. 使用 EasyMock 创建 Expetation:

    EasyMock.expect(ManagementFactory.getPlatformMBeanServer()).andReturn(mockMBeanServer);

在上面的代码中,我收到以下错误:

java.lang.IllegalStateException:在 org.easymock.internal.MocksControl.andReturn(MocksControl.java:218) 的返回值类型不兼容

最后,在尝试了很多之后,我需要忽略这个类:

@PowerMockIgnore( { 
    "org.apache.commons.logging.*", 
    "javax.management.*", 
}) 

我的测试用例正在工作,除了模拟和测试 MBean 类。有更好的选择吗?

4

1 回答 1

0

看起来您遗漏了对 的调用mockStatic()。您的测试方法将变为:

@Test
public void testMyBean() throws Exception {
  MBeanServer mockMBeanServer = createMock(MBeanServer.class);

  PowerMock.mockStatic(ManagementFactory.class);

  EasyMock.expect( ManagementFactory.getPlatformMBeanServer() )
    .andReturn(mockMBeanServer);
  //...
}

PowerMock 有一些很棒的文档涵盖了这个主题

于 2013-04-17T17:00:52.080 回答