gpt4 book ai didi

java - 无法使用模拟来抛出异常 - 抛出的异常未被捕获

转载 作者:太空宇宙 更新时间:2023-11-04 09:44:28 24 4
gpt4 key购买 nike

我有一个方法,我想模​​拟抛出的异常,以便输入 catch 语句:

public static String func(String val) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
return Base64.encode(md5.digest(val.getBytes()));
} catch (NoSuchAlgorithmException toCatch) {
return "*";
}
}

我写的测试是这样的:

@Test
public void testFunc() throws Exception {
MessageDigest md5 = PowerMockito.mock(MessageDigest.class);
PowerMockito.when(md5.getInstance(anyString())).thenThrow(new NoSuchAlgorithmException());
Assert.assertEquals("*", func("in"));
}

但是我得到:

java.security.NoSuchAlgorithmException:  MessageDigest not available

PowerMockito.when()行上。这意味着异常已经通过,但没有被捕获?我做错了什么?

更新:我尝试过以下修改

@PrepareForTest({MessageDigest.class}) 
@Test
public void testFunc() throws Exception {
PowerMockito.mockStatic(MessageDigest.class);
PowerMockito.when(MessageDigest.getInstance(anyString())).thenThrow(new NoSuchAlgorithmException());
Assert.assertEquals("*", testFunc("in"));
}

这会导致函数运行而不触发异常。

还有这个:

@PrepareForTest({MessageDigest.class})
@Test
public void testFunc() throws Exception {
PowerMockito.mockStatic(MessageDigest.class);
MessageDigest md5 = PowerMockito.mock(MessageDigest.class);
PowerMockito.doThrow(new NoSuchAlgorithmException()).when(md5, "getInstance", anyString());
Assert.assertEquals("*", func("in"));
}

仍然没有调用 catch 语句,与我之前得到的类似。

最佳答案

反转 stub :

doThrow(new NoSuchAlgorithmException()).when(md5, "getInstance", anyString())

通过按照您的方式创建它,您可以在实际方法被 stub 之前调用它。

关于java - 无法使用模拟来抛出异常 - 抛出的异常未被捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55592345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com