테스트 가능한 가장 작은 SW를 실행하여 예상대로 동작하는지 확인하는 테스트
즉, 테스트 대상 단위 크기를 작게 설정하여 간단하고, 디버깅하기 쉽게 작성
@Test
void test1() {
String expected = "java";
String actual = "java?";
//JUnit5
//두 값이 같은지 확인
assertEquals(expected, actual);
//AssertJ
assertThat(expected).isEqualTo(expected);
}
@Test
void test2() {
String str = "Hello My Name is ej";
//JUnt5
assertNotNull(str);
assertTrue(str.startsWith("Hello"));
assertTrue(str.contains("is"));
assertTrue(str.endsWith("ej"));
//AssertJ
assertThat(str).isNotNull()
.startsWith("Hello")
.contains("is")
.endsWith("ej");
}
given (준비) : 데이터가 준비되었을 때
when (실행) : 함수 실행하면
then (검증) : 결과가 나와야 함
public class LottoNumberGenerator {
public List<Object> generate(int money){
if(!isValidMoney(money)) {
throw new RuntimeException("올바른 금액이 아닙니다.");
}
return generate();
}
//지불 금액이 같은지 확인
private boolean isValidMoney(int money) {
return money == 1000;
}
//로또 번호 생성
private List<Object> generate(){
return new Random()
.ints(1, 45+1)
.distinct()
.limit(6)
.boxed()
.collect(Collectors.toList());
}
}
@DisplayName("로또 번호 갯수 테스트")
@Test
void lottoNumberSizeTest() {
//given
//로또 생성기 생성 후 1000원 준비
final LottoNumberGenerator lottoNumberGenerator = new LottoNumberGenerator();
final int price = 1000;
//when
//1000원 지불
final List<Object> lottoNumber = lottoNumberGenerator.generate(price);
//then
//로또 개수가 6개인지 확인
assertThat(lottoNumber.size()).isEqualTo(6);
}
@ | 설명 |
---|---|
Test | Test Method임을 선언 |
DisplayName | Test class or method의 사용자 정의 이름 선언 |
Timeout | 실행 시간 선언, 초과되면 실패하도록 |
BeforeEach | 모든 테스트 실행 전에 실행할 테스트 |
AfterEach | 모든 테스트 실행 후에 실행할 테스트 |
BeforeAll | 현재 클래스 실행 전 제일 먼저 실행할 테스트 (static으로 선언) |
AfterAll | 현재 클래스 종료 직후 실행할 테스트 (static으로 선언) |
@BeforeEach, @BeforeAll
: 클래스 내에 존재하는 각각의 @Test 실행 전/후에 매번 실행
@BeforeAll, @AfterAll
: 모든 테스트 실행 전/후 딱 한 번만 실행
출처🙇🏻♀️
단위테스트와 예시
assertEquals
Maven에서 AssertJ 사용하기
Maven - AssertJ Core
AssertJ와 예시
@어노테이션
@BeforeEach와 @BeforeAll의 차이