당신은 목록의 내용을 주장하기 위해 다음을 수행 할 수 있습니다AssertJ를 사용하면 목록의 내용에 대해 복잡한 어설 션을 수행하는 방법은 무엇입니까? AssertJ에서
assertThat(list).extracting("name").containsExactlyInAnyOrder("Alice", "Bob");
나는 종종 앨리스는 키가 큰 갈색 머리와 밥이라고 주장, 자신이 예를 들어, 요소 자체에 더 복잡한 주장을하고자 찾아
작고 대머리 다. AssertJ를 사용하여이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
내 자신의 솔루션을하는 것입니다 :
assertThat(list).extracting("name").containsExactlyInAnyOrder("Alice", "Bob");
list.stream()
.filter(person -> "Alice".equals(person.getName()))
.forEach(alice -> {
assertThat(alice).extracting("size").isEqualTo("tall")
assertThat(alice).extracting("hair").isEqualTo("brunette")
});
list.stream()
.filter(person -> "Bob".equals(person.getName()))
.forEach(bob -> {
assertThat(bob).extracting("size").isEqualTo("tiny")
assertThat(bob).extracting("hair").isNull()
});
또는 동등 (자바 7) :
assertThat(list).extracting("name").containsExactlyInAnyOrder("Alice", "Bob");
for(Person person : list){
switch (testCase.getName()){
case "Alice":
assertThat(person).extracting("size").isEqualTo("tall")
assertThat(person).extracting("hair").isEqualTo("brunette")
break;
case "Bob":
assertThat(person).extracting("size").isEqualTo("tiny")
assertThat(person).extracting("hair").isNull()
break;
}
}
하지만 더 나은 솔루션이 있다면 궁금하고있다.
이 솔루션은 예상되는 요소가 목록에 있고 요소 자체가 정확하다는 점을 좋아합니다.
assertThat(list).containsOnlyElementsOf(Arrays.asList(
new Person("Alice", "tall", "brunette"),
new Person("Bob", "tiny", null)
)
을 도움이되기를 바랍니다. 나는 클래스가 콜렉션을 포함 할 때 주로이 복잡한 어설 션에 대한 필요성에 부 닥치고이 내부 콜렉션에 대한 단언도하고 싶다. – neXus