繁体   English   中英

JUnit Mockito测试失败并显示equalTo

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM