问题描述
我需要在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 (将#修改为@)