아래 싸이트의예제를 바탕으로 assertj 예제를 사용한다.

http://knight76.tistory.com/entry/Java8-Function%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EA%B0%9D%EC%B2%B4-%EB%B3%B5%EC%82%AC-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%98%88%EC%A0%9C
 


java 8에서 동작할 수 있도록 assert-core 3.x 이상 버전에에 의존한다. java7 이하를 쓸 경우는 2.x 버전을 이용한다.
난 java8을 사용해서 3.1.0을 사용했다.

<pom.xml>

<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.1.0</version>
<scope>test</scope>
</dependency>



 소스는 다음과 같다. 보라색으로 칠한 것을 주의깊게 본다.
import static org.assertj.core.api.Assertions.assertThat;
import java.util.stream.Stream;
import java.util.Arrays;
import java.util.List;

public class ConvertObjectTest { @Test
public void convertObjectListWithFunctionTest() {
// given
OneMember samuel = new OneMember(1, "Samuel");
OneMember daisy = new OneMember(2, "Daisy");
OneMember matt = new OneMember(3, "Matt");

// when
List<OnePerson> persons = Stream.of(samuel, daisy, matt)
.map(OnePerson::new)
.sorted(comparing(OnePerson::getId))
.collect(toList());

List<OnePerson> list = Arrays.asList(new OnePerson(1, "Samuel"), new OnePerson(2, "Daisy"), new OnePerson(3, "Matt"));
assertThat(persons).hasSameElementsAs(list);
}

일반적으로 List와 같은 Collection 에 대한 테스트 코드가 상당히 verbose 하다. 첫 번째는 x, 두 번째는 y 이렇게 assert equal로 테스트를 해야 하는데, assertJ의 가장 특징은 이런 verbose한 코드를 줄일 수 있다는 점에서 참 좋았다.


예제와 같이 List<OnePerson> 객체 두개를 한 줄에서 assert로 체크해 볼 수 있어서 좋다.


관련 URL 


http://knight76.tistory.com/entry/AspectJ-Array-List-Map%EC%9D%84-%EC%89%BD%EA%B2%8C-%ED%85%8C%EC%8A%A4%ED%8A%B8%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-%EC%98%88%EC%A0%9C



Posted by '김용환'
,