java单元测试:我应该使用null还是可选的。返回()中的空()?
我测试一个Spring Data JPA
方法,如下所示:
Optional<Country> findByUuid(final UUID uuid);
当我为这个方法编写单元测试时,我可以通过在thenReturn()
方法中使用返回值null
或Optional.empty()
来测试它
when(demoRepository.findByUuid(uuid)).thenReturn(null);
// or
when(demoRepository.findByUuid(uuid)).thenReturn(Optional.empty());
那么,哪一种方法更合适呢
# 1 楼答案
后者
当一个方法返回Optional时,无论出于何种目的,都会隐式地假设它不可为null。如果调用方不仅要检查是否为空,还要检查可选值中是否有值,那么调用返回可选值的方法的所有代码都会非常冗长
客户端代码不应检查可选返回是否为空。因此,使用前者极有可能产生空指针异常