Home AssertJ (테스트) 사용법
Post
Cancel

AssertJ (테스트) 사용법

org.assertj.core.api.Assertions를 이용하는 테스트 코드 작성을 위해 AssertJ의 기본 작성법을 정리한다.

AssertJ

AssertJ는 Junit의 테스트 코드에 사용되고 테스트 코드의 가독성과 편의성을 더 높여주는 라이브러리이다.

AssertJ의 테스트 코드는 assertThat() 으로 시작한다. 또한 메서드를 연쇄적으로 호출해 테스트 코드를 작성할 수 있다.

Object 테스트

isEqualTo() 메서드는 객체의 참조를 비교한다. 객체의 필드를 비교하려면 usingRecursiveComparison() 메서드를 활용하면 된다.

  • isNotSameAs(): 객체가 같은 지
  • isSameAs(): 객체가 같은 지
  • usingRecuresiveComparison(): 객체의 값 비교에 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public  class  Dog { 
	private String name; 
	private Float weight; 

	// getters and setters 
} 

@Test  
void  objectTest() { 
	Dog  fido  =  new  Dog("Fido", 5.25F); 
	Dog  fidosClone  =  new  Dog("Fido", 5.25F); 

	assertThat(fido).isNotSameAs(fidosClone);
	// 참조는 다르기 때문에 NotSame
	assertThat(fido).usingRecursiveComparison().isEqualTo(fidosClone);
	// 객체의 값은 각각 같기 때문에 Equal
}

Boolean

  • assertTrue() : 괄호 안의 반환 값이 True일 때
  • assertFalse() : 괄호 안의 반환 값이 False 일 때
1
2
3
4
@Test
void booleanTest() {
	assertTrue("".isEmpty());
}

Class

클래스 타입은 보통 필드, 클래스 타입, 애노테이션 등을 확인할 때 사용한다.

  • isInterface(): 특정 클래스가 인터페이스 인지 확인
  • isAssignableFrom(): 특정 클래스가 다른 클래스에 할당 가능한 지 확인
  • isInstanceOf(), isNotInstanceOf(): 실제 값이 주어진 유형의 인스턴스 인지 확인
1
2
3
4
5
6
7
8
@Test
void classTest() {
	Dog  fido  =  new  Dog("Fido", 5.25F); 
	
	assertThat(fido).isInstanceOf(Dog.class);
	assertThat(Runnable.class).isInterface(); 	
	assertThat(Exception.class).isAssignableFrom(NoSuchElementException.class);
}

Exception

  • assertThat 대신 assertThatThrownBy()를 사용한다.
  • assertDoesNotThrow()
  • assertThrows()
  • assertThatNullPointerException()
1
2
3
4
5
6
7
8
9
@Test
void exceptionTest() {
	assertThatThrownBy( () -> { throw new Exception("boom!");} )
			.isInstaceOf(Exception.class)
			.hasMessageContaining("boom"); //예외 메시지에 특정 문자열이 포함되는 지 확인

	assertThrows(IllegalArgumentException.class, 
			() -> inputValidator.validateInputName(overLengthNames));
}

Iterable/Array

  • contains(): 요소 포함 여부 확인
  • isNotEmpty(): Collection이 비어 있는지 확인
  • startsWith(): 주어진 문자로 시작하는 지 확인
  • 이 외 다양한 메서드
1
2
3
4
5
6
7
@Test  void  arrayTest() { 
	List<String> list = Arrays.asList("1", "2", "3"); 
	
	assertThat(list).contains("1"); 
	assertThat(list).isNotEmpty(); 
	assertThat(list).startsWith("1"); 
}

둘 이상의 assertion을 연결하여 확인하는 경우

1
2
3
4
5
6
7
8
9
@Test  void  arrayTest() { 

	List<String> list = Arrays.asList("1", "2", "3"); 

	assertThat(list).isNotEmpty() 
			.contains("1") 
			.doesNotContainNull() 
			.containsSequence("2", "3"); 
}

Character

  • isNotEqualTo(), isEqualTo: 문자 비교
  • isGreaterThanOrEqualTo(): 특정 문자보다 같거나 큰지 확인
  • isLowerCase(): 소문자 인지 확인
1
2
3
4
5
6
@Test  
void  characterTest() { 
	assertThat("s").isNotEqualTo("b") 
			.isGreaterThanOrEqualTo("c") 
			.isLowerCase(); 
}

Double/Float/Integer

  • withPrecision(): 정밀도를 설정할 수 있다.
1
2
3
void  doubleTest() { 
	assertThat(5.1).isEqualTo(5, withPrecision(1d)); 
}

Map

  • isNotEmpty(): Map이 비어있는 지 확인
  • containsKey(): 특정 Key 포함 여부 확인
  • doesNotContainsKey(): 특정 키 미포함 여부 확인
  • contains(entry()): 특정 entry 포함 여부 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
@Test  
void  mapTest() { 
	HashMap<Integer, String> map = new  HashMap<>(); 

	map.put(1, "a"); 
	map.put(2, "b"); 
	map.put(3, "c"); 

	assertThat(map).isNotEmpty() 
			.containsKey(2) 
			.doesNotContainKeys(10) 
			.contains(entry(1, "a")); 
}

File

파일 타입은 보통 파일의 존재 여부, 디렉터리/파일 여부, 컨텐츠 포함 여부 등을 확인할 때 사용한다.

  • exists(): 파일 존재 여부
  • isFile(): 파일 인지 여부
  • canRead(): 읽기 가능 여부
  • canWrite(): 쓰기 가능 여부
1
2
3
4
5
6
7
8
@Test  
void  fileTest() { 
	assertThat(new File("/Users/aaron/Desktop/capture/test.jpeg"))
			.exists() 
			.isFile() 
			.canRead() 
			.canWrite(); 
}
This post is licensed under CC BY 4.0 by the author.