如何使用NoSuchAlgorithmException和KeyStoreException覆盖JUnit的块捕获

时间:2014-10-14 11:36:55

标签: java junit try-catch mockito

我想介绍getKeyStore()方法,但我不知道如何为NoSuchAlgorithmException,KeyStoreException,UnrecoverableKeyException和CertificateException覆盖catch块。我的方法是:


public static KeyManagerFactory getKeyStore(String keyStoreFilePath)
        throws IOException {
    KeyManagerFactory keyManagerFactory = null;
    InputStream kmf= null;
    try {
        keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
        KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
        keystoreStream = new FileInputStream(keyStoreFilePath);
        keyStore.load(keystoreStream, "changeit".toCharArray());
        kmf.init(keyStore, "changeit".toCharArray());
    } catch (NoSuchAlgorithmException e) {
        LOGGER.error(ERROR_MESSAGE_NO_SUCH_ALGORITHM + e);
    } catch (KeyStoreException e) {
        LOGGER.error(ERROR_MESSAGE_KEY_STORE + e);
    } catch (UnrecoverableKeyException e) {
        LOGGER.error(ERROR_MESSAGE_UNRECOVERABLEKEY + e);
    } catch (CertificateException e) {
        LOGGER.error(ERROR_MESSAGE_CERTIFICATE + e);
    } finally {
        try {
            if (keystoreStream != null){
                keystoreStream.close();
            }
        } catch (IOException e) {
            LOGGER.error(ERROR_MESSAGE_IO + e);
        }
    }
    return kmf;
}

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可以模拟 try块的任何句子来抛出您想要捕获的异常。

模拟KeyManagerFactory.getInstance投掷NoSuchAlgorithmException的示例。在这种情况下,您将覆盖第一个catch块,您必须对捕获的其他异常(KeyStoreException,UnrecoverableKeyException和CertificateException)执行相同的操作

您可以执行以下操作(方法getInstancestatic,您必须使用PowerMockito代替Mockito,有关详情,请参阅此question

@PrepareForTest(KeyManagerFactory.class)
@RunWith(PowerMockRunner.class)
public class FooTest {

   @Test
   public void testGetKeyStore() throws Exception {
      PowerMockito.mockStatic(KeyManagerFactory.class);
      when(KeyManagerFactory.getInstance(anyString())).thenThrow(new NoSuchAlgorithmException());
   }
}

希望有所帮助