如何测试引发异常的方法?

如何测试引发异常的方法?

问题描述:

如何使用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接受抛出的异常?

+1

阅读此https://shipilev.net/blog/2014/exceptional-performance/并检查此https://github.com/shipilev/article-exception-benchmarks/tree/master/src/main/java/净/ shipilev/perf /例外 –

+0

@OlegEstekhin好吧,但它为什么工作?什么让他的代码抛出异常,而我的触发失败? – Gili

+0

我认为主要区别在于该示例调用抛出异常的方法,而不是从基准本身抛出 –

总结从我从Kiril S.Oleg Estekhin收到我已经收到了答案:如果基准方法抛出异常

江铃控股有限公司将始终失败。为了纠正这种情况,基准测试方法必须抓住这个例外。然后,它可以使用Blackhole对象消耗该异常,或者从基准测试方法返回该异常。这将阻止编译器优化掉throw语句。