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 8AssertJ Core 3.x 에 의존합니다 .

3. 실행 중인 구아바 어설션

AssertJ 에는 Guava 유형에 대한 사용자 지정 어설션이 있습니다: ByteSource , Multimap , Optional , Range , RangeMapTable .

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");

보시다시피 mmap1mmap1_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 프로젝트 에서 찾을 수 있습니다 .

다음 »
AssertJ의 Java 8 기능
« 이전
AssertJ 소개
Junit footer banner