对于Spring Framework
应用,关于测试:
AssertJ
和JUnit
。 JUnit
和Spring MVC Test
,其中后者强制与Hamcrest
一起使用。请参阅Is there a way to use AssertJ assertions with Spring MVC Test?(答案是否)如果在AssertJ
中可以将以下内容应用于集合:
.containsExactly(tuple("087", "Peter", "Jordani", parse("1980-01-01")),
...
tuple("088", "Isaias", "Jordano", parse("1980-01-01")))
这三种方法的最佳等效近似值是什么:
containsExactly
tuple
parse
适用于:
.andExpect(model().attribute("personas", ???)
我在谷歌做了一项研究:
String
,Integer
hasItems
)Date
个对象,当然是相同的类型,但也不是String
。答案 0 :(得分:1)
请看一下这些测试示例:
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")))
)
));
}
}
让我们详细检讨:
<强> containsExactly 强>
contains
方法是它的替代方法。而hasItem
更像assertj.contains
。
<强>元组强>
可以由allOf
和hasProperty
的组合替换。在我看来,它看起来很难看,我会想到只使用new Person("a","b","c")
。除非你有一些额外的字段,你不想验证。
<强>解析强>
我在这里使用了相同的方法。如果您对它进行更精确的观察,您会注意到此方法与匹配器无关。它只是使用new SimpleDateFormat("yyyy-MM-dd")
解析字符串到目前为止。如果您不想使用assertj's
,可以轻松地将其提取到某个util类。