개발한 기능을 test 할때, java의 main이나 웹 애플리케이션의 컨트롤러를 통해 기능을 실행할 경우 -> 준비와 실행에 시간이 많이 걸린다!! 이를 해결하기 위해 나온것이 JUnit이라는 프레임워크 이다. -> JUnit을 사용해서 테스트를 실행
1. test를 하기 위해서 test아래에 test를 위한 패키지를 만든다. 나는 respository를 test 하기 위해 repository 패키지를 생성했다.
2. respoitory아래에 test를 위한 class를 생성해준다.( public은 제외해도 상관없다, 어디서 쓰이는게 아니라 test를 위한 class이므로 )
3. test를 위한 class 생성을 끝냈다면, test할 repository를 아래와 같이 선언해준다.
4. repository에 있던 기능을 사용하고, 해당 기능이 제대로 되었는지 확인을 위해 Assertions을 사용해주었다.
- 만약 Assertions의 assertEquals를 사용하여 두 값이 같은지 확인해준다.
- Assertions.assertEquals(기대값, 실제값);
- 만약 두 값이 같다면 아래와 같은 오류가 뜨지 않고, 두 값이 다르다면 아래와 같이 오류가 뜨는 것을 확인할 수 있을 것이다.
- 테스트 실패시 아래와 같이 코드를 작성해 에러 메시지를 뜨게 할 수 도 있다
- Assertions.assertEquals(기대값, 실제값, "error!!! ");
5. 위에 사용한건 JUnit의 Assertions이지만, 최근에는 assertj를 많이 사용한다고 한다. -> assertj가 좀 더 쉽게 사용 가능
6. 아래의 assertj 문법이 위의 JUnit의 문법과 다른 것을 알 수 있다.
- member 와 result가 같은지 물어보는 문법임
- Assertions.assertThat(값).isEqualTo(값); -> assertj문법
- assertj가 좀 더 사용하기 쉬운것을 볼 수 있다( 읽기도, 보기도 편하다)
🌟 중요
7. test 케이스를 실행하다 데이터가 중복으로 저장될 가능성이 있어 ,중복된 데이터 때문에 테스트 끼리 충돌이 발생할 수 있다. 이때문에 하나의 테스트가 끝나면 전에 있던 test의 기록을 clear를 통해 한번 정리를 해주어야 한다. 이를 위해서 -> @AfterEach 사용
- 아래와 같이 test 클래스에 @AfterEach 메서드를 만들어준다.
- 하나의 테스트가 실행되고 끝나면 @AfterEach 메서드가 실행된다.
- 아래의 repository.clearStore()은 repository의 메서드 중 map을 clear 기능을 가져온 것이다(-> store.clear())
- 결론 : AfterEach는 하나의 테스트 메서드가 끝난 후에 실행되는 거라고 생각하면 될듯
❗ 메모
검증을 위한 틀(=test)을 만들어 놓고, 기능을 만드는 것을 테스트 주도 개발(Test-Driven Development, TDD)라고 한다.
❗ 메모
command + shift + t -> 자동으로 테스트 클래스를 만들어주는 단축어
❗ 메모
test 케이스를 작성할때 아래와 같이 given, when, then으로 나누는 것이 좋다. (-> 익숙해지면 변형하는 것도 좋음)

❗ 메모
optional 로 받는다면 아래와 같이 .get 으로 꺼내서 사용하면 된다.
'스프링 | 스프링 부트' 카테고리의 다른 글
스프링 부트(입문) - 스프링 빈 (0) | 2024.08.17 |
---|---|
스프링 부트(입문) - 회원 서비스 개발, 테스트(입문) (0) | 2024.08.15 |
스프링 부트(입문) - 웹 애플리케이션 계층 구조 (0) | 2024.08.09 |
스프링 부트 - 단축어(Mac) (0) | 2024.08.07 |
스프링 부트(입문) - API(@ResponseBody) (0) | 2024.08.02 |