JUnit 테스트의 구조 → AAA 패턴
이는 Arrange(준비), Act(실행), Assert(단언)의 약자로, 각 단계에서 수행되는 작업을 의미
💡 Intellij 테스트 단축키 (클래스에서) cmd + Shift + T
테스트 하기 전!
- 어떤 테스트 코드가 다른 테스트에 영향을 주는 것을 최소화
- 테스트 클래스에서 static 필드를 피하자!
- 테스트 메서드에서 시험하는 시나리오를 정확하게 요약해서 설정
@Test
- 해당 메소드가 단위 테스트임을 명시하는 어노테이션
- 테스트 패키지 하위의 `@Test` 어노테이션이 붙은 메소드를 단위 테스트로 인식하여 실행
- 테스트 이름이 함수 이름이 default로 지정됨
@DisplayName
- 읽기 좋은 다른 이름을 부여 가능
- 코드 예시
@Test
@Displayname("두 값의 산술 평균 검사")
public void answersArithmeticMeanOfTwoNumbers() {
...
}
1. Arrange - 준비
테스트 상태를 설정하는 준비 단계
- 테스트를 수행하기 위해 초기 상태를 설정
- 필요한 객체를 생성하고, 의존성을 주입하고, 데이터를 준비하는 등의 작업을 수행
2. Act - 실행
테스트를 준비한 후에는 검증하려는 코드 실행
- 정확히 어떤 동작을 검증하기 위해 특정 메서드나 기능을 호출
3. Assert - 단언
기대하는 결과를 단언
- 코드 예시
@Test
public void answersArithmeticMeanOfTwoNumbers() {
//준비
ScoreCollection collection = new ScoreCollection();
collection.add(()->5);
collection.add(()->7);
//실행
int actualResult = collection.arithmeticMean();
//단언
Assertions.assertEquals(6,actualResult);
}
Assertions 키워드를 작성하시 자동완성 기능으로 두 가지 추천해준다.
1) `org.junit.jupiter.api.Assertions` - junit
2) `org.assertj.core.api.Assertions` - assertj
💡 Assertions → Add on-demand static import Alt + Enter (단축키 팁!)
* JUnit과 AssertJ 값 비교 메서드
AssertJ를 더 많이 쓰지만 그래도 알아두자!
a: 예상 값, b: 실제 값
// JUnit
assertEquals(a, b);
// AssertJ
assertThat(a).isEqualTo(b);