如何解决Junit:期望/ assertThrows 不起作用
如何看我的代码,在那里抛出异常: (假设它是 UserService.generate() )
try {
UrlDecoder.decode(someString); // invalid somestring here
...
} catch (UnsupportedEncodingException | RuntimeException e) {
customLogger("Exception message here");
}
我如何尝试在测试中捕获此异常:
@Test(expected = IllegalArgumentExeception.class)
public void test() {
UserService u = new UserService();
u.generate("invalidString");
}
结果:
//info logs here
java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "^I"
//Exception details here
java.lang.AssertionError: Expected exception: java.lang.IllegalArgumentException
解决方法
URLDecoder.decode(someString) 的 javadoc 声明它不会抛出异常。我相信您打算使用 URLDecoder.decode(someString,StandardCharsets.UTF_8.name())。但是只有在不支持您要求的字符集时才会抛出 Unsupported encoding 异常。这是一种可以引发异常的方法,以及一种检查它是否被抛出的方法。这个答案使用了 Mockito,这是一个非常强大的模拟框架。
import org.mockito.Mockito;
public class UserService {
public void generate(String someString,String encoding) {
try {
URLDecoder.decode(someString,encoding);
} catch (UnsupportedEncodingException e) {
customLogger("Exception message here");
}
}
public void customLogger(String string) {
// Do something
}
}
@Test
public void testThrowsOnBadEncoding() {
UserService u = Mockito.spy(new UserService());
u.generate("vl%23%46","unknown");
Mockito.verify(u).customLogger("Exception message here");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。