当前位置: 首页 > 知识库问答 >
问题:

使用assertJ断言列表元素的属性

邹学民
2023-03-14
assertThat(mylist, contains(
  containsString("15"), 
  containsString("217")));
    null
assertThat(mylist.get(0)).contains("15");
assertThat(mylist.get(1)).contains("217");
assertThat(mylist).elements()
  .next().contains("15")
  .next().contains("217")

编辑:一个附加的非功能性需求是,测试应该可以很容易地通过附加的约束来扩展。在Hamcrest中,表达附加约束是相当容易的,例如。

assertThat(mylist, contains(
  emptyString(),                                     //additional element
  allOf(containsString("08"), containsString("15")), //extended constraint
  containsString("217")));                           // unchanged

依赖于列表索引的测试必须重新编号。在本例中,使用自定义条件的测试必须重写完整的条件(请注意,allof中的约束不限于子字符串检查)。

共有1个答案

米浩穰
2023-03-14

我发现的最接近的方法是编写一个“containssubstring”条件和一个静态方法来创建条件,并使用

assertThat(list).has(containsSubstring("15", atIndex(0)))
                .has(containsSubstring("217", atIndex(1)));

但也许您应该简单地编写一个循环:

List<String> list = ...;
List<String> expectedSubstrings = Arrays.asList("15", "217");
for (int i = 0; i < list.size(); i++) {
    assertThat(list.get(i)).contains(expectedSubstrings.get(i));
}

或者编写一个参数化的测试,以便由JUnit自己在每个子字符串上测试每个元素。

 类似资料:
  • 基本上,问题是是否有AssertJ(首选)或JUnit断言: 我的测试类(CUT)扩展了JAXB的。解组XML文件时,它应该保证相等的对象恰好存在一次。为了验证这一点,我的测试当前看起来是这样的(在示例中,标准ctor创建相等对象):

  • 在AssertJ中,您可以执行以下操作来断言列表的内容: 我经常发现自己想对元素本身做更复杂的断言,例如,断言爱丽丝是个高高的黑发女人,鲍勃是个矮小的秃头。使用AssertJ做这件事的最佳方法是什么? 我自己的解决办法是:

  • 我有两门课: 还有我的测试: 我希望它能通过,因为解包装可选,将转换为,在最后一个方法中,我只是比较字符串。 但它在最后一行失败了: 我不知道为什么可选包装没有打开

  • 我是8Java的新手。我有一个A类对象的列表,其中A的结构如下: 现在我有了一个类A的元素L的列表,在这个列表中,我想用inactive=false更新一个名为name="test "的元素。 我可以通过编写for循环并创建一个新列表来非常轻松地做到这一点。 但是我如何使用Java8流API呢?

  • 假设我有一个,我这样做: ...通行证。现在我要检查获得的是否正确:

  • 我正在阅读使用Assertj验证结果的测试类。偶尔,我会发现一个没有断言的断言。 是否有可能在开发周期的某个地方识别这些类?我的第一个猜测是使用自定义声纳规则。虽然我不明白应该如何定义这个方法后面应该跟一个断言(返回void的方法?)。