티스토리 뷰
스프링에서는 @Test 어노테이션으로 테스트 케이스를 작성할 수 있게 돕는다.
어노테이션을 활용하면, 개별 메서드를 실행할 수 있게 해주어 메인 메서드에서 실행하는 것보다 훨씬 빠르고 쉽게 테스트를 진행할 수 있다.
테스트 파일은 자동으로 생성된 테스트 폴더 아래에서 수행하며, 패키지 구조, 파일명은 메인과 맞추는 것이 일반적이라고 한다.
Optoinal<Type>
옵셔널 클래스는 자바 8부터 도입되어 null 값인 경우에도 값을 반환할 수 있도록 해준다.
클래스를 옵셔널로 감싸면 옵셔널 클래스가 되고, 이를 꺼낼 때 ofNullable로 꺼내면 null 값을 넣을 수 있도록 해주고, of 로 꺼내면 에러를 NullPointException이 발생한다.
@Override
public Optional<Member> findById(Long id) {
return Optional.ofNullable(store.get(id));
}
옵셔널 클래스의 값을 꺼내기 위해서는 get()을 사용한다.
@Test
public void save(){
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result = repository.findById(member.getId()).get();
assertThat(member).isEqualTo(result);
}
그런데 바로 get()으로 꺼내는 것은 권장하지 않고, orElseGet()으로 꺼내어, 값이 없으면 디폴트 값을 지정하여 꺼내는 것을 더 추천한다고 한다.
(이외에도 orElse()를 사용할 수도 있는데, orElse()는 인자로 값을 받아, 메서드를 인자로 넣으면 실행한 후의 값을 넣어주고 그것으로 null 판별을 한다는 것 같은데 잘 이해가 되지 않으므로, 아직은 있다는 것 정도만 알고 있도록 한다.)
AssertJ assertThat
AssertJ는 값 검증을 위해 사용되는 라이브러리이며, 스태틱으로 임포트하여 사용하면 assertThat 메서드를 바로 활용할 수 있다.
JUnit보다 가독성이 좋아 잘 사용된다고 한다.
assertThat 메서드는 actual 타입에 따라 Assert 클래스를 반환하며, 그 클래스는 타입에 맞는 Assertion 메서드를 제공한다.
각 메서드는 반환 타입이 SELF여서, 메서드 체이닝 패턴으로 로직 작성이 가능하다.
assertThat(actual).isEqualTo(expected)와 같이 사용이 가능하여 글을 읽는 순서대로 코드를 읽을 수 있어 직관적이다.
import static org.assertj.core.api.Assertions.assertThat;
//public static AbstractAssert<SELF, T> assertThat(T actual)
@Test
public void save(){
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result = repository.findById(member.getId()).get();
assertThat(member).isEqualTo(result);
}
* 공식문서: https://www.javadoc.io/doc/org.assertj/assertj-core/latest/org/assertj/core/api/Assertions.html
@AfterEach
각 테스트 메서드의 순서는 보장되지 않는다.
그래서 여러 개의 메서드를 실행했을 때, 메서드마다 저장소에 테스트 케이스를 삽입하여 오류가 날 수 있다.
각각의 메서드를 독립적으로 굴려야 하므로, 각 메서드가 종료되었을 때 저장소를 비워주는 메서드를 별도로 만들어 수행하는 것이 좋다.
이때 사용하는 것이 @AfterEach이다. @AfterEach는 메서드가 종료될 때마다 실행된다.
TDD
테스트 주도 개발
구현 클래스를 만들기 전에 미리 테스트를 만들어놓고 진행
* 인프런 스프링 입문(김영한) 강의 공부
'개발' 카테고리의 다른 글
| [누구나 자료구조와 알고리즘] 3장. 빅오표기법 (0) | 2022.10.17 |
|---|---|
| [1일 1로그 100일 완성 IT지식] 024, 025. 소프트웨어 프로그래밍 + 어셈블러 (0) | 2022.05.31 |
| [Spring Boot] 웹 브라우저 요청과 응답 (0) | 2022.05.25 |
| [1일 1로그 100일 완성 IT지식] 010. 비트 모아 데이터 (0) | 2022.05.22 |
| [Java] 제어자 (0) | 2022.05.18 |
- Total
- Today
- Yesterday
- clean-up policy
- 자바의정석
- 패키지
- ORM
- 몽고db
- 배열
- 서버환경
- OneToMany
- ResetController
- 스프링부트
- 제어자
- AfterEach
- overfatching
- 항해99
- ManyToOne
- 단항연산자
- bean
- AssertJ
- MVC
- controller
- DI
- GIT
- 고민
- Java
- IOC
- jinja2
- 임포트
- 상속
- toCharArray
- ManyToMany
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
