【问题标题】:fest asserting order in listfest 断言列表中的顺序
【发布时间】:2014-10-26 10:29:12
【问题描述】:

我想测试列表中的元素是否按特定顺序排列。具体来说,我想测试元素的成员。所以像:

assertThat(listOfObjects).hasProperty(name).inOrder("one", "two", "three");

有可能做这样的事情吗?现在我手动迭代元素并为每个元素设置一个断言。

【问题讨论】:

    标签: java unit-testing junit fest


    【解决方案1】:

    快速浏览版本 1 的源代码 (link here) 我发现了这个声称可以做你想做的事情的方法:

    /**
     * Verifies that the actual {@code List} contains the given objects, in the same order. This method works just like
     * {@code isEqualTo(List)}, with the difference that internally the given array is converted to a {@code List}.
     *
     * @param objects the objects to look for.
     * @return this assertion object.
     * @throws AssertionError       if the actual {@code List} is {@code null}.
     * @throws NullPointerException if the given array is {@code null}.
     * @throws AssertionError       if the actual {@code List} does not contain the given objects.
     */
    public @Nonnull ListAssert containsExactly(@Nonnull Object... objects) {
      checkNotNull(objects);
      return isNotNull().isEqualTo(newArrayList(objects));
    }
    

    如果我对 Javadoc 的理解正确,您只需这样做:

    assertThat(listOfObjects).containsExactly(object1, object2, object3);
    

    请注意,此方法在 2.0-M8 版本中存在一些问题。 As detailed here! 2.0-M9 版本已解决。

    【讨论】:

    • 是的。但问题是我想检查一个属性,即对象不是字符串,而是有一个名为 name 的属性,它具有这些值。
    • @SaadFarooq 啊,我现在和你在一起。我不确定你可以用 Fest 做到这一点。当然,我看不到从 ListAssert 或扩展类中检索属性的方法。也许向 FEST 团队提出功能请求?如果属性按照您预期的顺序排列,是否有任何理由无法排列对象?这并不理想,但我想知道您是否可以根据属性对它们进行排序,然后断言对象的顺序正确?
    • 好吧,排序发生在我正在测试的类中。测试是看一个方法是否正确地排序。类实例(对象)很复杂。我无法在我的测试中重新创建它们,所以我只测试一个属性。我确信我可以为这种情况编写一个匹配器,但我想知道是否有人已经这样做了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多