当我试图运行这个 - 所有工作如预期和测试成功通过。
@Test
public void shouldThrowNPE() {
@SuppressWarnings("OptionalAssignedToNull") Optional<String> nullOptional = null;
Assertions.assertThrows(NullPointerException.class, () -> nullOptional.isEmpty());
}
但对于这个,当我改变 羔羊座 到 方法参考 我收到 NPE 并且测试失败。
@Test
public void shouldThrowNPE() {
@SuppressWarnings("OptionalAssignedToNull") Optional<String> nullOptional = null;
Assertions.assertThrows(NullPointerException.class, nullOptional::isEmpty);
}
谁能给点提示,这里有什么问题?
我并不是Java方法引用表达式的解释专家,但我的理论是,对实例方法的引用需要在创建方法句柄(代表要执行的代码)之前访问实例本身。这就是为什么NPE发生在 assertThrows(..)
将会被执行,因此NPE不能被它捕获。