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



我想覆盖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)执行相同操作

您可以执行以下操作(由于方法getInstancestatic,您必须使用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());
   }
}

希望它能帮助

相关内容

  • 没有找到相关文章

最新更新