我总是用注释测试我的异常。我应该总是使用Lambda表达式进行异常测试吗?
@Test (expected = Exception.class)
public void test1() {
methodToTest() // throws an exception
}
我终于切换到了Java 8,并且遇到了lambda表达式。现在有另一种选择来获得所需的结果。
@Test
public void test2() {
assertThrows(Exception.class,() -> methodToTest());
}
public static <X extends Throwable> Throwable assertThrows(
final Class<X> exceptionClass, final Runnable block) {
try {
block.run();
} catch(Throwable ex) {
if (exceptionClass.isInstance(ex))
return ex;
}
fail("Failed to throw expected exception");
return null;
}
据我所知,与第二版本,你可以更精确地检查单的方法,你不必担心单个测试中的其他方法可能抛出预期的异常也是如此。此外,使用“assertThrows”方法,所有测试都可以具有相同的结构,因为这一切都归结为调用断言。
除了这两点,有没有什么有利于新方法的论点?对我来说,只要我只在单个测试中测试单一方法,感觉它仍然优于注释。
凡在这个lambda表达式题 ? – Dici
“test2”将lambda表达式移交给assertThrows方法,该方法作为Runnable进行处理。 – leimooo
你问为什么有必要使用lambda表达式?或者为什么你会这样做,而不是使用@Test(expected = Exception.class)注释?如果是后者,你自己几乎可以回答这些问题,这些都是2点好处。 –