🛸JUnit5 🛸
JUnit은 자바 프로그래밍 언어용 유닛 테스트 프레임워크
🛸AssertJ 🛸
AssertJ는 풍부한 assertions 세트와 유용한 오류 메시지를 제공하고 테스트 코드 가독성을 향상시키며, IDE내에서 매우 쉽게 사용할 수 있도록 설계된 Java 라이브러리
JUnit에서 많이 사용됨
🛸공부!🛸
[우테코] JUnit 5와 AssertJ로 테스트코드 작성하기
Java 에서 테스트 코드를 짤 때 특정 자료구조의 원소 값을 확인해야 하는 테스트가 있다.반복문을 돌면서 일일히 확인해야 하거나 그냥 코드 한줄 한줄 입력하는 방법도 있지만 org.assertj.core.api.A
velog.io
🎀assertThat(결과).contains()🎀
중복여부, 순서에 관계 없이 값만 일치하면 테스트가 성공
결과에 포함되지 않은 값이 contains의 매개변수로 있으면 테스트는 실패
단, 결과의 모든 값이 contains 매개변수에 있지 않아도 됨
(즉 결과가 contains의 매개변수를 포함하고 있는지를 검사 / contains의 매개변수들 ⊂ 결과의 값들)
🎀assertThat(결과).containsOnly()🎀
원소값과 갯수가 정확히 일치해야 테스트가 통과
원소의 순서, 중복 여부는 무시
🎀assertThat(결과).containsExactly()🎀
원소가 정확히 일치해야 테스트가 통과
원소의 순서, 중복 여부 중요
🛸test/java/study 공부 🛸

과제 안에 들어있는 StringTest로 공부 가능하다!
import static org.assertj.core.api.Assertions.*; // AssertJ의 다양한 API
import static org.assertj.core.api.Assertions.assertThat;//우테코파일내임포트 'assertThat'클래스
import static org.assertj.core.api.Assertions.assertThatThrownBy;//우테코파일내임포트 'assertThatThrownBy'클래스
import org.junit.jupiter.api.Test;
JUnit 코드의 기본 구조 - 테스트로 사용할 클래스를 만들고 @Test 어노테이션을 메서드에 붙이기!
@Test
void split_메서드로_주어진_값을_구분() {
String input = "1,2";
String[] result = input.split(",");
assertThat(result).contains("2", "1");
assertThat(result).containsExactly("1", "2");
}
- 2,1이 들어잇으면통과
-딱 1,2여야 통과
@Test
void split_메서드_사용시_구분자가_포함되지_않은_경우_값을_그대로_반환() {
String input = "1";
String[] result = input.split(",");
assertThat(result).contains("1");
}
.split 오끼
- 1포함시 통과
@Test
void substring_메서드로_특정_구간_값을_반환() {
String input = "(1,2)";
String result = input.substring(1, 4);
assertThat(result).isEqualTo("1,2");
}
🎀assertThat(result).isEqualTo🎀
대상의 내용 자체 일치여부 판단
✨substring()✨
start와 end로 문자열에서 골라낼 부분의 처음과 끝을 지정해 잘라옴!
@Test
void charAt_메서드로_특정_위치의_문자_찾기() {
String input = "abc";
char charAtElement = input.charAt(0);
assertThat(charAtElement).isEqualTo('a');
}
✨charAt()✨
@Test
void charAt_메서드_사용시_문자열의_길이보다_큰_숫자_위치의_문자를_찾을_때_예외_발생() {
String input = "abc";
assertThatThrownBy(() -> input.charAt(5))
.isInstanceOf(StringIndexOutOfBoundsException.class)
.hasMessageContaining("String index out of range: 5");
}
🎀assertThatThrownBy🎀 -> 무조건 에러가 발생해야 한다. 에러가 발생하지 않으면 실패
🛸내 테스트코드 작성🛸
- 최종 우승자가 hamster가 되어야 통과
("ham : --", "ster : ", "cute : ", "최종 우승자 : ham"가 출력에 포함되어야 함)
(랜덤수에 4,5가 들어가서 전진,노전진 컨트롤)
@Test
void 최종_우승자_hamster() {
assertRandomNumberInRangeTest(
() -> {
run("ham,ster,cute", "2");
assertThat(output()).contains("ham : --", "ster : ", "cute : ", "최종 우승자 : ham");
},
MOVING_FORWARD, STOP, STOP, MOVING_FORWARD, STOP, STOP
);
}
힝 5자 제한이라서 hamster를 못 쓰다니
- 시도 횟수가 -1이므로 IllegalArgumentException 에러 발생해야 통과
@Test
void 시도횟수에_대한_예외_처리() {
assertSimpleTest(() ->
assertThatThrownBy(() -> runException("ham,ster,cute", "-1"))
.isInstanceOf(IllegalArgumentException.class)
);
}

굿
EDOC 후배님들과 밥약이 있어서 오랜만에~!꾸미고!!
그동안의 폐인생활..



12만원 나왔다.. ㅎㅎ
'💾 Backend > 우아한 테크코스-프리코스' 카테고리의 다른 글
🛸 도메인 로직에 대한 단위 테스트 (0) | 2023.11.05 |
---|---|
🪐우테코 프리코스🪐 - 3주차🚀 (0) | 2023.11.02 |
🛸 커밋 메세지 컨벤션 (0) | 2023.11.01 |
🛸 Java 코드 컨벤션 ..ing (0) | 2023.10.31 |
🛸 객체지향 생활체조 원칙 🛸 (1) | 2023.10.29 |