AssertJ 与 Hamcrest 的等效性(仅适用于 Spring MVC 测试):如何测试集合中的每个 POJO 项目(带日期)

AssertJ to Hamcrest equivalency (only for Spring MVC Test): How test each POJO item of a collection (with dates)

对于 Spring Framework 应用程序,关于测试:

如果在 AssertJ 中可行,请将以下内容应用于 集合

.containsExactly(tuple("087", "Peter", "Jordani", parse("1980-01-01")),
                 ...
                 tuple("088", "Isaias", "Jordano", parse("1980-01-01")))

这三种方法的最佳等效近似值是什么:

应用于:

 .andExpect(model().attribute("personas", ???)

我在 google 中进行了研究:

请查看这些测试示例:

public class Test {
        private List<Person> personList;
        private Person peter = new Person("087", "Peter", parse("1980-01-01"));
        private Person john = new Person("081", "John", parse("1980-01-22"));

        @BeforeEach
        void setup() {
            personList = new ArrayList<>();
            personList.add(peter);
            personList.add(john);
        }

        @Test
        void assertjTest() {
            assertThat(personList).extracting("age", "name", "date")
                    .containsExactly(
                            tuple("087", "Peter", parse("1980-01-01")),
                            tuple("081", "John", parse("1980-01-22"))
                    );
        }

        @Test
        void hamcrestTest() {
            org.hamcrest.MatcherAssert.assertThat(personList,
                    contains(
                            allOf(
                                    hasProperty("age", is("087")),
                                    hasProperty("name", is("Peter")),
                                    hasProperty("date", is(parse("1980-01-01")))
                            ),
                            allOf(
                                    hasProperty("age", is("081")),
                                    hasProperty("name", is("John")),
                                    hasProperty("date", is(parse("1980-01-22")))
                            )
                    ));

        }
}

让我们详细回顾一下:

完全包含

contains 方法是它的替代方法。而 hasItem 更像是 assertj.contains

元组

可能被allOfhasProperty的组合所取代。在我看来,它看起来很丑,我会考虑使用 new Person("a","b","c")。除非你有一些你不想验证的额外字段。

解析

这里我只是对它们都使用了相同的方法。如果你更仔细地看一下它,你会注意到这个方法与匹配器无关。它只是使用 new SimpleDateFormat("yyyy-MM-dd") 解析字符串到现在为止。如果您不想使用 assertj's,您可以轻松地将其提取到某个实用程序 class。