如何解决如何使用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 举报,一经查实,本站将立刻删除。