如何测试引发异常的方法?
问题描述:
如何使用jmh来测试引发异常的方法?如何测试引发异常的方法?
我试图在江铃控股有限公司1.19以下:
@Benchmark
public void throwException() throws IllegalArgumentException
{
throw new IllegalArgumentException("Hard-coded exception");
}
,但得到这个错误:
# Run progress: 0.00% complete, ETA 00:02:00
# Fork: 1 of 3
# Warmup Iteration 1: <failure>
java.lang.IllegalArgumentException: Hard-coded exception
[...]
我应该按如下黑洞异常?
@Benchmark
public void throwException(Blackhole bh)
{
try
{
throw new IllegalArgumentException("Hard-coded exception");
}
catch (IllegalArgumentException e)
{
bh.consume(e);
}
}
还是有另一种方法告诉jmh
接受抛出的异常?
答
总结从我从Kiril S.和Oleg Estekhin收到我已经收到了答案:如果基准方法抛出异常
江铃控股有限公司将始终失败。为了纠正这种情况,基准测试方法必须抓住这个例外。然后,它可以使用Blackhole
对象消耗该异常,或者从基准测试方法返回该异常。这将阻止编译器优化掉throw
语句。
阅读此https://shipilev.net/blog/2014/exceptional-performance/并检查此https://github.com/shipilev/article-exception-benchmarks/tree/master/src/main/java/净/ shipilev/perf /例外 –
@OlegEstekhin好吧,但它为什么工作?什么让他的代码抛出异常,而我的触发失败? – Gili
我认为主要区别在于该示例调用抛出异常的方法,而不是从基准本身抛出 –