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

Java 如何使用NoSuchAlgorithmException和KeyStoreException覆盖JUnit的块捕获,java,junit,try-catch,mockito,Java,Junit,Try Catch,Mockito,我想介绍getKeyStore()方法,但我不知道如何介绍NoSuchAlgorithmException、KeyStoreException、UnrecoverableKeyException和CertificateException的catch块。我的方法是: 我该怎么做?您可以模拟块中的任何句子,并尝试抛出您想要捕获的异常 模拟调用KeyManagerFactory.getInstance以抛出NoSuchAlgorithmException的示例。在这种情况下,您将覆盖第一个catc

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




我该怎么做?

您可以模拟
块中的任何句子,并尝试
抛出您想要捕获的异常

模拟调用
KeyManagerFactory.getInstance
以抛出
NoSuchAlgorithmException
的示例。在这种情况下,您将覆盖第一个catch块,您必须对捕获的其他异常(KeyStoreException、unrecoverablekeyeexception和certificateeexception)执行相同的操作

您可以执行以下操作(由于方法
getInstance
static
,因此必须使用
Mockito
,有关详细信息,请参阅此)


希望对您有所帮助

您好,在巡回测试中效果良好。但当我为KeyStoreException做了同样的事情时。没用。我的代码是:@Test public void testGetStore()抛出异常{PowerMockito.mockStatic(KeyStore.class);PowerMockito.when(KeyStore.getInstance(Mockito.anyString())。然后抛出(new KeyStoreException());}。Manny谢谢你在嘲笑另一门课KeyStore。也许您忘记更改@PrepareForest注释了。应该是:@PrepareForTest(KeyStore.class)No。我在@PrepareForTest中创建了密钥库。我认为问题在于KeyStore.getInstance(Mockito.anyString())没有抛出KeyStoreException。我想这是因为KeyStore是singleton@troig,我尝试了上面的方法,但它对我不起作用。不幸的是,我无法在注释部分添加完整的代码,而且它不是答案,所以我不想添加我尝试的详细信息作为答案。我意识到这是一个老问题,但它与我的问题完全相同。对于我来说,提供我的场景细节的最佳方式是什么?我不确定它是否需要涵盖。然而,也许我会创建
handleException(Exception)
,或者如果我使用的是java7,也许我会捕获多个异常()。我不确定这个日志是否值得努力。
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;
}
@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());
   }
}