【问题标题】:why does my hamcrest "contains" not work as expected?为什么我的 hamcrest“包含”不能按预期工作?
【发布时间】:2014-08-12 11:14:11
【问题描述】:

我运行这一行:

List<String> ids = new List<String>()
ids.add("id1");
ids.add("id2");
assertThat(ids, contains("id1"));

但奇怪的是它返回“失败”。

我该如何解决这个问题?

【问题讨论】:

  • 我认为你可以使用 assertTrue(ids.contains("id1"));

标签: java unit-testing testing hamcrest


【解决方案1】:

你需要使用

assertThat(ids, hasItem(equalTo("id1"));

这是因为 contains 会期望您有一个匹配器来匹配可迭代对象中的每个项目。

如果您查看 api 文档 here 您可以看到 contains 和 hasItem 之间的区别。如果您的列表如下:

List<String> ids = new List<String>()
ids.add("id1");

你的断言会如你所愿。

【讨论】:

  • 您可以挂断电话至equalTo。所有接受其他匹配器作为参数的匹配器都将用它包装非匹配器。
  • 是的,您可以删除它,但它更易读,更清楚您正在测试的内容,这就是我添加它的原因。
猜你喜欢
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 2020-01-10
  • 1970-01-01
  • 2021-05-30
  • 2020-03-05
相关资源
最近更新 更多