Mockito在通过时没有认出我的模拟课()

时间:2013-03-13 14:30:43

标签: java junit mockito

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

我是在嘲笑这个班级错了还是我错过了什么?

2 个答案:

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

这就是它失败的原因。