我想覆盖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;
}
我该怎么做?
您可以mocktry
块的任何语句来抛出您想要捕获的异常。
嘲笑KeyManagerFactory.getInstance
调用以抛出NoSuchAlgorithmException
的示例。在这种情况下,您将覆盖第一个catch块,您必须对捕获的其他异常(KeyStoreException、UnrecoverableKeyException和CertificateException)执行相同操作
您可以执行以下操作(由于方法getInstance
是static
,您必须使用PowerMockito而不是Mockito
,有关更多信息,请参阅此问题)
@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());
}
}
希望它能帮助