1. 개요
이 기사는 AssertJ Guava 관련 어설션에 중점을 두고 있으며 AssertJ 시리즈의 두 번째 기사입니다. AssertJ에 대한 일반 정보를 보려면 AssertJ 소개 시리즈의 첫 번째 기사를 살펴보십시오 .
2. 메이븐 의존성
AssertJ를 Guava와 함께 사용하려면 pom.xml 에 다음 의존성을 추가해야 합니다 .
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-guava</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
여기 에서 최신 버전을 찾을 수 있습니다 .
버전 3.0.0부터 AssertJ Guava 는 Java 8 및 AssertJ Core 3.x 에 의존합니다 .
3. 실행 중인 구아바 어설션
AssertJ 에는 Guava 유형에 대한 사용자 지정 어설션이 있습니다: ByteSource , Multimap , Optional , Range , RangeMap 및 Table .
3.1. ByteSource 어설션
두 개의 빈 임시 파일을 만들어 시작하겠습니다.
File temp1 = File.createTempFile("bael", "dung1");
File temp2 = File.createTempFile("bael", "dung2");
그리고 그들로부터 ByteSource 인스턴스를 생성합니다:
ByteSource byteSource1 = Files.asByteSource(temp1);
ByteSource byteSource2 = Files.asByteSource(temp2);
이제 다음 어설션을 작성할 수 있습니다.
assertThat(buteSource1)
.hasSize(0)
.hasSameContentAs(byteSource2);
3.2. 멀티맵 어설션
Multimap 은 둘 이상의 값을 주어진 키와 연결할 수 있는 맵입니다. Multimap 어설션 은 일반 Map 구현 과 매우 유사하게 작동 합니다.
Multimap 인스턴스 를 만들고 몇 가지 항목을 추가하여 시작하겠습니다 .
Multimap<Integer, String> mmap = Multimaps
.newMultimap(new HashMap<>(), Sets::newHashSet);
mmap.put(1, "one");
mmap.put(1, "1");
이제 다음과 같이 주장할 수 있습니다.
assertThat(mmap)
.hasSize(2)
.containsKeys(1)
.contains(entry(1, "one"))
.contains(entry(1, "1"));
또한 사용 가능한 두 가지 추가 어설션이 있습니다. 둘 사이에는 미묘한 차이가 있습니다.
- 포함AllEntriesOf 및
- hasSameEntriesAs.
이 두 주장을 살펴봅시다. 몇 가지 맵을 정의하는 것으로 시작하겠습니다.
Multimap<Integer, String> mmap1 = ArrayListMultimap.create();
mmap1.put(1, "one");
mmap1.put(1, "1");
mmap1.put(2, "two");
mmap1.put(2, "2");
Multimap<Integer, String> mmap1_clone = Multimaps
.newSetMultimap(new HashMap<>(), HashSet::new);
mmap1_clone.put(1, "one");
mmap1_clone.put(1, "1");
mmap1_clone.put(2, "two");
mmap1_clone.put(2, "2");
Multimap<Integer, String> mmap2 = Multimaps
.newSetMultimap(new HashMap<>(), HashSet::new);
mmap2.put(1, "one");
mmap2.put(1, "1");
보시다시피 mmap1 과 mmap1_clone 은 정확히 동일한 항목을 포함하지만 서로 다른 두 맵 유형 의 서로 다른 두 개체입니다 . Map mmap2 에는 모든 맵에서 공유되는 단일 항목이 포함되어 있습니다 . 이제 다음 주장이 참입니다.
assertThat(mmap1)
.containsAllEntriesOf(mmap2)
.containsAllEntriesOf(mmap1_clone)
.hasSameEntriesAs(mmap1_clone);
3.3. 선택적 어설션
Guava의 선택 사항 에 대한 어설션 에는 내부 값을 추출하기 위한 값 존재 확인 및 유틸리티가 포함됩니다.
선택적 인스턴스 를 생성하여 시작하겠습니다 .
Optional<String> something = Optional.of("something");
이제 값의 존재를 확인하고 Optional 의 내용을 확인할 수 있습니다.
assertThat(something)
.isPresent()
.extractingValue()
.isEqualTo("something");
3.4. 범위 어설션
Guava의 Range 클래스에 대한 어설션에는 Range 의 하한 및 상한 확인 또는 특정 값이 주어진 범위 내에 있는지 여부가 포함됩니다.
다음을 수행하여 간단한 문자 범위를 정의해 보겠습니다.
Range<String> range = Range.openClosed("a", "g");
이제 다음을 테스트할 수 있습니다.
assertThat(range)
.hasOpenedLowerBound()
.isNotEmpty()
.hasClosedUpperBound()
.contains("b");
3.5. 테이블 어설션
AssertJ의 테이블 특정 어설션을 사용하면 행 및 열 수와 셀 값의 존재 여부를 확인할 수 있습니다.
간단한 테이블 인스턴스를 만들어 보겠습니다.
Table<Integer, String, String> table = HashBasedTable.create(2, 2);
table.put(1, "A", "PRESENT");
table.put(1, "B", "ABSENT");
이제 다음 확인을 수행할 수 있습니다.
assertThat(table)
.hasRowCount(1)
.containsValues("ABSENT")
.containsCell(1, "B", "ABSENT");
4. 결론
AssertJ 시리즈의 이 기사에서는 모든 Guava 관련 기능을 살펴보았습니다.
모든 예제 및 코드 조각의 구현은 GitHub 프로젝트 에서 찾을 수 있습니다 .