4

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!

クラスを間違って嘲笑していますか、それとも何か不足していますか?

4

2 に答える 2

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

    }

正常に動作します。

于 2013-03-13T14:37:04.267 に答える
1

この行はあなたのモックを上書きしています:

mockCrypto = CryptoManager.getCrypto();

それが失敗する理由です。

于 2013-03-13T14:37:14.950 に答える