我想寫以下方法的常規單元測試:「java.util.NoSuchElementException:沒有出席java.util.Optional.get值」在斯波克測試使用嘲笑
public Set<ObjectName> getAll()
{
return getMBeanServerConnection().map(mbsc ->
{
try
{
return mbsc.queryNames(null, null);
}
catch (IOException e)
{
logger.log(Level.SEVERE, "An exception was thrown: ", e);
return Collections.<ObjectName>emptySet();
}
}).get();
}
該方法調用以下:
private Optional<MBeanServerConnection> getMBeanServerConnection()
{
return virtualMachineHelper.getMb();
}
然後:
public Optional<MBeanServerConnection> getMb()
{
VirtualMachine virtualMachine = getOmsVirtualMachine();
if (virtualMachine == null)
{
return Optional.empty();
}
try
{
Properties props = virtualMachine.getAgentProperties();
String connectorAddress =
props.getProperty(JMX_REMOTE_PROPERTY);
JMXServiceURL url = new JMXServiceURL(connectorAddress);
JMXConnector connector = JMXConnectorFactory.connect(url);
MBeanServerConnection mbsc = connector.getMBeanServerConnection();
return Optional.of(mbsc);
}
catch (IOException e)
{
logger.log(Level.SEVERE, "An exception was thrown: ", e);
return Optional.empty();
}
}
這只是轉發呼叫噸方法0 mbsc.queryNames(null,null)
我試圖測試,當調用getAll()然後mbsc.queryNames(null,null)被調用一次。
我有以下代碼:
def virtualMachineHelperMock = Mock(VirtualMachineHelper)
def mBeanServerConnection = Mock(MBeanServerConnection)
ObjectNamesRepository objectNamesRepository = new ObjectNamesRepository(virtualMachineHelperMock)
void setup() {
virtualMachineHelperMock.getMb() >> Optional.of(mBeanServerConnection)
}
def "when calling getAll then queryNames is called from mBeanServerConnection"() {
when:
objectNamesRepository.getAll()
then:
1 * mBeanServerConnection.queryNames(null, null)
}
但是,這提供了以下錯誤:
java.util.NoSuchElementException: No value present
at java.util.Optional.get(Optional.java:135)
at com.ullink.ulconsole.repository.ObjectNamesRepository.getAll(ObjectNamesRepository.java:73)
at com.ullink.ulconsole.repository.ObjectNamesRepositorySpec.GetAll(ObjectNamesRepositorySpec.groovy:32)
你可以發佈更多的代碼,例如中'getMBeanServerConnection()' –
當然,我已經編輯過這篇文章 –