0
私はMBeanServer
をMockitoとモックしようとしていますが、私の試みは失敗します。mockStatic:PowerMockでmock java.lang
@Test
public void testGetAllCacheProperties() {
mockStatic(ManagementFactory.class);
MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectInstance inst = server.registerMBean(new MyBeanService(), ObjectName.getInstance(SERVICE_NAME));
given(ManagementFactory.getPlatformMBeanServer()).willReturn(server);
}
私は通常jBoss AS 7
上で動作する方法に私のモックを注入するとします
@GET
public Response getAllProperties() {
MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
しかし、それは例外で失敗:
org.mockito.exceptions.misusing.WrongTypeOfReturnValue:
JmxMBeanServer cannot be returned by getPlatformMBeanServer()
getPlatformMBeanServer() should return MBeanServer
更新
01私がしようPowerMockito.doReturn(server).when(ManagementFactory.class, "getPlatformMBeanServer");
私が得る例外:PowerMockは一口コードを変更すると、明らかに保護されたjava.lang
クラス のコードを噛まないようにしようとするので、java.lang
パッケージから静的モックすることはできないです
java.lang.LinkageError: loader constraint violation: when resolving method "java.lang.management.ManagementFactory.getPlatformMBeanServer()Ljavax/management/MBeanServer;" the class loader (instance of org/powermock/core/classloader/MockClassLoader) of the current class, my_package_for_test_class.TestClass, and the class loader (instance of <bootloader>) for the method's defining class, java/lang/management/ManagementFactory, have different Class objects for the type javax/management/MBeanServer used in the signature