테스트 대상 지정
assertThat(테스트 타겟).메소드1().메소드2().메소드3();
문자열 테스트
- isNotEmpty() : 비어있지 않고
- contains("문자(열)") : 해당 "문자(열)"을 포함
- doesNotContains("문자(열)") : 해당 "문자(열)" 미포함
- startWith("문자(열)") : 해당 "문자(열)" 로 시작
- endsWith("문자") : 해당 "문자"로 끝남
여러 필드를 검사하고 싶을 경우
import static org.assertj.core.api.Assertions.tuple;
// extracting name, age and and race.name nested property
assertThat(fellowshipOfTheRing).extracting("name", "age", "race.name")
.contains(tuple("Boromir", 37, "Man"),
tuple("Sam", 38, "Hobbit"),
tuple("Legolas", 1000, "Elf"));
tuple 사용
doesNotThrownAnyException
@DisplayName("메뉴 항목을 생성한다.")
@Test
void createTest() {
assertThatCode(()->new MenuItem("만두", 5000))
.doesNotThrowAnyException();
}
에러가 발생하지 않았는지 테스트 (예외를 던지지 않는 경우 처리 방법)
assertThatCode
@DisplayName("메뉴판에 없는 메뉴를 선택할 시 예외를 반환한다.")
@Test
void chooseTest2() {
Menu menu = new Menu(List.of( new MenuItem("돈가스", 5000), new MenuItem("냉면", 7000)));
assertThatCode(()->menu.choose("불닭"))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage("잘못된 메뉴 이름입니다.");
}
첫 번째 인자 - 기대하는 예외 클래스
두 번째 인자 - 예외가 발생하는 코드
마지막 - 원하는 에러 메시지 출력
isInstanceOf 안에 예상되는 예외 클래스를 넣어준다.
hasMessage나 hasMessageContains를 통해 에러 메시지를 출력할 수 있다.
isEqualTo
package org.example;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class CookingTest {
@DisplayName("메뉴에 해당하는 음식을 만든다.")
@Test
void makeCookTest() {
Cooking cooking = new Cooking();
MenuItem menuItem = new MenuItem("돈가스", 5000);
Cook cook = cooking.makeCook(menuItem);
assertThat(cook).isEqualTo(new Cook("돈가스", 5000));
}
}
해당 객체의 참조가 같은지 테스트
참고 블로그
반응형