我希望closeSession()
方法在调用时抛出异常,以便我可以测试我的日志记录是否正在完成。我已将Crypto
对象模拟为mockCrypto
,并将其设置如下:
@Test
public void testdecrpyMcpDataExceptions() throws Exception {
Crypto mockCrypto = Mockito.mock(Crypto.class);
try {
mockCrypto = CryptoManager.getCrypto();
logger.info("Cyrpto Initialized");
} finally {
logger.info("Finally");
try {
logger.info("About to close Crypto!");
Mockito.doThrow(new CryptoException("")).when(mockCrypto).closeSession();
mockCrypto.closeSession();
} catch (CryptoException e) {
logger.warn("CryptoException occurred when closing crypto session at decryptMcpData() in CipherUtil : esi");
}
}
}
然而,当我运行它时,我收到错误:
Argument passed to when() is not a mock!
我是在嘲笑这个班级错了还是我错过了什么?
答案 0 :(得分:4)
不要在
覆盖你的模拟mockCrypto = CryptoManager.getCrypto();
经过测试
@Test(expected=RuntimeException.class)
public void testdecrpyMcpDataExceptions() throws Exception {
Crypto mockCrypto = mock(Crypto.class);
doThrow(new RuntimeException()).when(mockCrypto).closeSession();
mockCrypto.closeSession();
}
工作正常。
答案 1 :(得分:1)
这一行会覆盖你的模拟:
mockCrypto = CryptoManager.getCrypto();
这就是它失败的原因。