How to cover block catch by JUnit with NoSuchAlgorithmException and KeyStoreException(如何使用 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());
}
}
希望对你有帮助
这篇关于如何使用 NoSuchAlgorithmException 和 KeyStoreException 覆盖 JUnit 的块捕获的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何使用 NoSuchAlgorithmException 和 KeyStoreException 覆盖 JUnit 的块捕获


基础教程推荐
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
- 存储 20 位数字的数据类型 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- Struts2 URL 无法访问 2022-01-01
- RabbitMQ:消息保持“未确认"; 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- 如何对 Java Hashmap 中的值求和 2022-01-01