JUnit Mockito测试失败,与等于



我试图理解为什么添加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,它是一个对象。然而,该对象包含一个只匹配nullmatches方法,这就是is工作的原因。

顺便说一句,测试可能应该只是阅读assertNull(testObj.getData(false))

你的问题实际上是关于Hamcrest的,而不是Mockito。

您正在测试实际值,即testObj.getData(false),即null,等于nullValue()返回的值, 是 IsNull() 匹配器的实例。IsNull 的实例不等于null,因此失败。

我建议避免使用Hamcrest,在我看来,Hamcrest更难正确使用,也不如AssertJ优雅。

使用AssertJ,你会写

assertThat(testObj.getData(false)).isNull();

不再有静态方法可以猜测,而是有效的自动完成流畅断言。

相关内容

  • 没有找到相关文章

最新更新