我希望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!

我是在嘲笑课堂错误还是我只是想念一些东西?

最佳答案

你不覆盖你的模拟

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();

    }

工作良好。

09-27 02:28