如何使用Mockito测试Jmx代理结构问题

问题描述

我需要在Mockito中为以下Jmx Agent代码编写一些常规的单元测试(我将对其进行示意性展示)。看起来像这样:

@Component
public class JmxAgent {

private final Map<String,ObjectName> mbeanRegistrations = new HashMap<>();

private final ExecutorService executor = Executors.newSingleThreadExecutor(newThreadFactoryBuilder().setNameFormat(getClass().getName()).build());

public Map<String,ObjectName> getRegistrationMap() {
    return mbeanRegistrations;
}

@Reference(cardinality = ReferenceCardinality.MULTIPLE,policy = ReferencePolicy.DYNAMIC,policyOption = ReferencePolicyOption.GREEDY)
public void add(final MyService service) {
    executor.execute(new Runnable() {
        @Override
        public void run() {
            synchronized (mbeanRegistrations) {
                try {
                    final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
                    final String providerName = service.getName();
                    //check if there is already some info and delete it
                    if (mbeanRegistrations.get(providerName) != null) {
                            mbs.unregisterMBean(objectName);
                        } catch (final InstanceNotFoundException e) {}
                    }
                    final ObjectName name = new ObjectName("bla.blub.blib:type=" + providerName);
                    final MyBean mbean = new MyBean(service);
                    mbs.registerMBean(mbean,name);
                    mbeanRegistrations.put(providerName,name);
                } catch (InstanceAlreadyExistsException | NotCompliantMBeanException | MalformedobjectNameException
                        | MBeanRegistrationException | RuntimeException e) {}
            }
        }
    });
}

public void remove(final MyService service) {
    executor.execute(new Runnable() {
        @Override
        public void run() {
            synchronized (mbeanRegistrations) {
                final ObjectName objectName = mbeanRegistrations.get(service.getName());
                if (objectName != null) {
                    final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
                    try {
                        mbs.unregisterMBean(objectName);
                    } catch (final MBeanRegistrationException | InstanceNotFoundException e) {}
                }
            }
        }
    });
}
}

这是一个简单的Osgi服务的收集器,它为每个服务创建我的DynamicMBean实现的对应bean,以便在JMX实现中显示其诊断数据。我的问题是:如何使用Mockito进行测试?什么应该定义为@Mock,什么不应该嘲笑?要测试什么重要?因为有点迷路,所以我想我了解了模拟的想法,但是不知道如何在这里应用它。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)