【问题标题】:Matcher assert on two objects匹配器断言两个对象
【发布时间】:2016-01-05 20:22:12
【问题描述】:

我有一个集成测试来检查响应的内容类型,如下所示

Header header = new BasicHeader("Content-Type", "application/octet-stream; charset=UTF-8");

assertThat(response.getEntity().getContentType(), Matchers.is(header));

测试失败,断言响应与带有此奇怪消息的预构建标头相同

Expected: is <Content-Type: application/octet-stream; charset=UTF-8>
    but: was <Content-Type: application/octet-stream; charset=UTF-8>

我的直觉是,既然我们说的是两个对象,那么我们说的是两个不同的实例。为此我也尝试过

assertThat(response.getEntity().getContentType(), Matchers.equalTo(header));

但结果是一样的。

知道我做错了什么吗?

【问题讨论】:

  • response.getEntity().getContentType()的返回类型是否实现equals
  • @StefanBirkner 该方法返回 apache.httpcomponets 包的 BasicHeader。根据我的调查,这等于实施。有什么想法吗?
  • 哪个版本覆盖了equals? This one doesn't. 看起来你可能需要一个自定义匹配器

标签: java spring junit integration-testing hamcrest


【解决方案1】:

鉴于 equals 方法对您失败,另一种方法是使用反射相等性忽略导致 equals 方法出现问题的字段

org.mockito.Matchers.refEq(object,[要忽略的字段列表])

【讨论】:

    【解决方案2】:

    这意味着这两个对象中的toString 给出了相同的结果,但是这些对象在equals 方法方面是不同的。也许他们甚至有不同的班级

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      相关资源
      最近更新 更多