[英]JUnit Mockito test fails with equalTo
我试图了解为什么添加equalTo会使我的测试失败。 我已经通过简单的课程和测试重新创建了问题。
第一次测试通过,第二次测试失败。
样品分类
public class Class {
Map<String, Boolean> data = new HashMap<>();
public Map<String, Boolean> getData(boolean access) {
if (!access)
return null;
return data;
}}
测试班
public class ClassTest {
@InjectMocks
private Class testObj;
@Test
public void testGetDataNull() {
assertThat(testObj.getData(false), is(nullValue()));
}
@Test
public void testGetDataNull2() {
assertThat(testObj.getData(false), is(equalTo(nullValue())));
}}
测试失败显示此错误信息
Expected: is <null>
but: was null
问:两者之间有什么区别?
非常感谢任何见解!
这是因为nullValue()
返回org.hamcrest.core.isNull
对象。 因此它不等于null
,它是一个对象。 但是该对象包含一个matches
方法,该方法将只匹配null
,这就是为什么is
作品。
assertNull(testObj.getData(false))
,测试可能应该只读取assertNull(testObj.getData(false))
您的问题实际上是关于Hamcrest,而不是Mockito。
您正在测试实际值(即testObj.getData(false)
,是否为null
)是否等于作为IsNull()匹配器实例的nullValue()
返回的值。 IsNull的实例不等于null
,因此失败。
我建议避免使用Hamcrest,我认为Hamcrest与AssertJ相比,更难正确使用且不够优雅。
使用AssertJ,您可以编写
assertThat(testObj.getData(false)).isNull();
不再需要猜测的静态方法,而是有效的自动完成的流利断言。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.