为什么 Optional return 类型的单元测试失败?
Why unit test fail with Optional return type?
考虑使用 Mockito(版本 2.23.4)进行单元测试的以下代码。我不知道为什么测试失败。如果我将 a.get(null) 更改为 a.get(2L) 或任何 Long 值,测试将通过。那么,当 anyLong() 应该为空值工作时,为什么 null 会失败?
public class A {
public Optional<Long> get(Long l) {
return Optional.empty();
}
@Test
public void test() {
A a = Mockito.mock(A.class);
Mockito.when(a.get(anyLong())).thenReturn(Optional.of(1L));
Assert.assertTrue(a.get(null).isPresent());
}
}
anyLong()
匹配器不再包含 NULL
。请参阅 ArgumentMatchers.anyLong()
的文档:
Any long
or non-null Long
.
Since Mockito 2.1.0, only allow valued Long
, thus null
is not anymore a valid value.
这不同于Mockito 1.9.5:
Any long
, Long
or null
.
考虑使用 Mockito(版本 2.23.4)进行单元测试的以下代码。我不知道为什么测试失败。如果我将 a.get(null) 更改为 a.get(2L) 或任何 Long 值,测试将通过。那么,当 anyLong() 应该为空值工作时,为什么 null 会失败?
public class A {
public Optional<Long> get(Long l) {
return Optional.empty();
}
@Test
public void test() {
A a = Mockito.mock(A.class);
Mockito.when(a.get(anyLong())).thenReturn(Optional.of(1L));
Assert.assertTrue(a.get(null).isPresent());
}
}
anyLong()
匹配器不再包含 NULL
。请参阅 ArgumentMatchers.anyLong()
的文档:
Any
long
or non-nullLong
.Since Mockito 2.1.0, only allow valued
Long
, thusnull
is not anymore a valid value.
这不同于Mockito 1.9.5:
Any
long
,Long
ornull
.