如何使用 NoSuchAlgorithmException 和 KeyStoreException 覆盖 JUnit 的块捕获
我想介绍 getKeyStore() 方法,但我不知道如何介绍 NoSuchAlgorithmException、KeyStoreException、UnrecoverableKeyException 和 CertificateException 的 catch 块.我的方法是:
I want to cover getKeyStore() methode, But I don't know how to cover catch block for NoSuchAlgorithmException, KeyStoreException, UnrecoverableKeyException and CertificateException. My methode is :
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;
}
<小时>
我该怎么做?
How do I do it?
推荐答案
你可以mock try
块中的任何一句话来抛出你想捕获的异常.
You can mock any sentence of the try
block to throw the exception you want to catch.
模拟 KeyManagerFactory.getInstance
调用以抛出 NoSuchAlgorithmException
的示例.在这种情况下,您将覆盖第一个 catch 块,您必须对捕获的其他异常(KeyStoreException、UnrecoverableKeyException 和 CertificateException)执行相同操作
Example mocking the KeyManagerFactory.getInstance
call to throw NoSuchAlgorithmException
. In that case, you will cover the first catch block, you have to do the same with other exceptions caught (KeyStoreException, UnrecoverableKeyException and CertificateException)
你可以这样做(因为方法 getInstance
是 static
,你必须使用 PowerMockito 而不是 Mockito
,请参阅此 问题了解更多信息)
You can do as follows (as method getInstance
is static
, you have to use PowerMockito instead Mockito
, see this question for more info)
@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());
}
}
希望对你有帮助
相关文章