도메인 모델
사람의 속성인 이름과 나이를 멤버 변수로 가지는도메인 모델이다.
public class Person {
private String name;
private int age;
public Person( String name, int age ) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
요구사항 충족하는 테스트 코드를 작성
- 사람들 중에 성인(나이가 26세 이상인 사람)이 있는지를 검증하는 JUnit 테스트를 작성
- 모든 사람의 이름을 대문자로 변환하여 리스트로 반환하는 JUnit 테스트를 작성
@BeforeEach를 통한 각 테스트 메서드의 준비 작업 수행
BeforeEach 어노테이션은 테스트 메서드가 실행되기 전에 반복적으로 필요한 설정이나 초기화 작업을 수행하는 용도로 사용한다.
class PersonTest {
private List<Person> people;
@BeforeEach
void setup() {
people = Arrays.asList(
new Person("bk", 18),
new Person("dk", 30),
new Person("yk", 25),
new Person("uk", 12));
}
}
사전 알고가기
- stream() : 컬렉션(Collection)이나 배열(Array)에서 스트림을 생성하는 메서드로, 스트림 파이프 라인을 구축하기 위해 사용
- map() : 스트림의 요소들을 하나씩 변환하는 메서드. 특정 필드나 메서드를 추출하여 새로운 값을 매핑하는데 사용. 스트림의 변환 작업을 수행하는 중요한 중간 연산이다.
- collect() : 스트림의 요소들을 수집하여 새로운 컬렉션이나 값을 생성하는 메서드. 스트림의 요소들을 리스트, 셋, 맵 등의 컬렉션으로 변환하는 등의 최종 연산에 해당한다.
- ::(메서드 레퍼런스) : 메서드 참조를 간단하게 표현하는 방법이다. 클래스명 또는 객체명과 메서드명을 연결하여 표현 가능하다. 예를 들면, 'Person::getName' 은 'Person' 클래스의 'getName()' 메서드를 참조하는 것을 의미한다.
- ->(람다 표현식) : 함수형 인터페이스의 구현을 간단하게 표현하는 방법이다. 예를 들어 'person -> person.getName()'은 'person'객체의 'getName()' 메서드를 호출하는 람다 표현식을 의미함.
요구사항 1
- 나이가 26세 이상인 사람이 있는지 검증
@Test
@DisplayName("특정 나이로 필터링이 되는지 확인:25세 초과")
void 특정_나이로_필터링() {
// Given
int ageToFilter = 25;
// When
List<Person> filteredPeople = people.stream()
.filter(person -> person.getAge() > 25 )
.collect(Collectors.toList());
// Then
assertEquals(1, filteredPeople.size());
assertEquals("dk", filteredPeople.get(0).getName());
}
요구사항 2
- 모든 사람의 이름을 대문자로 변환하여 리스트로 반환하는 JUnit 테스트를 작성
@DisplayName("모든 사람의 이름을 대문자로 변환하여 리스트로 반환하는지 확인")
@ParameterizedTest
@ValueSource(strings = {"BK", "DK", "YK", "UK"})
void 대문자_변환(String upperName) {
// Given: Person 클래스
// When
List<String> upperCaseNames = people.stream()
.map(person -> person.getName().toUpperCase())
.collect(Collectors.toList());
// Then
assertTrue(upperCaseNames.contains(upperName));
}
'Test Code' 카테고리의 다른 글
콘솔 기반 UI 테스트를 어떻게 해야할까? (0) | 2023.10.20 |
---|---|
[JUnit] 테스트하기 어려운 코드를 테스트 하기 쉬운 코드로 (0) | 2023.04.22 |
[JUnit] AssertJ 라이브러리의 문자열 테스트와 숫자 테스트의 메서드 (0) | 2023.04.14 |
[JUnit] assertj 활용한 테스트 코드 작성 (0) | 2023.04.12 |
[Java] JUnit을 이용한 테스트 및 리팩토링 (0) | 2023.03.02 |
댓글