断言throws对方法引用不起作用[重复]。

问题描述 投票:0回答:1

当我试图运行这个 - 所有工作如预期和测试成功通过。

@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);
}

谁能给点提示,这里有什么问题?

lambda nullpointerexception optional junit5 method-reference
1个回答
0
投票

我并不是Java方法引用表达式的解释专家,但我的理论是,对实例方法的引用需要在创建方法句柄(代表要执行的代码)之前访问实例本身。这就是为什么NPE发生在 assertThrows(..) 将会被执行,因此NPE不能被它捕获。

© www.soinside.com 2019 - 2024. All rights reserved.