728x90

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

본 블로그는 해당 스프링 강의(김영한) 수강 후, 작성된 게시물입니다.


코드를 코드로 검증하기!

작성한 코드가 정상적으로 동작하는지 검증하기 위해 테스트 케이스를 작성하면 된다.

 

보통 개발한 기능을 실행해서 테스트 할때,

       1. Java main method 통해

       2. Web applitaion의 Controller를 통해

  · 단점 : 준비 및 실행 시 많은 시간 소모 / 반복 실행 어렵 / 여러 테스트를 한번에 실행하기 어렵

▶ Javasms JUnit Framework로 테스트를 실행해서 아리헌 문제를 해결

 

▶ 폴더 구성

test 폴더 위치에서 main 폴더와 똑같이 repository 패키지를 생성하고, MemoryMemberRepositoryTest 클래스를 생성한다.

▶ MemoryMemberRepositoryTest 코드 작성

save 메소드를 실행하려고 한다면, 메소드 선언 후 그 위에 junit.juplter.api에 있는 Test 어노테이션을 붙여주기만 하면 된다. 코드 왼쪽에 실행버튼을 눌러 save함수를 실행하면 아래에서 보이듯이 실행이 된 것을 확인할 수 있다.

▷ test 코드 작성

member에 이름을 세팅하고, 해당 member를 repository에 저장한다. 저장한 member가 내가 저장한 member가 맞는지 출력 코드를 통해 확인해보면, 다음과 같이 true로 반환되어 출력된 것을 확인할 수 있다.

 

▷ 더 test 다운 코드 작성

System.out으로 하나하나 확인할 순 없다. 그러므로 junit.jupiter.api 에서 제공하는 Assertions의 assertEquals 메소드를 사용한다. assertEquals(기대하는 것, 실제 결과) 메소드를 작성하여 실행을 시키면, 왼쪽 아래에 초록색 체크 표시가 뜨며 출력 결과에는 아무것도 출력되지 않는 것을 확인할 수 있다.

 

test를 통과하지 못한 코드 확인 ◀

assertEquals의 actual 변수에 null을 작성하여 실행시킨다. 왼쪽 아래를 보면

 

  • 다른 패키지 사용

org.assertj.core.api 는 org.junit.jupiter.api보다 코드를 직관적으로 이해할 수 있다고 한다.
테스트 실행 결과

 

  • import를 전역으로 사용하기

import를 static으로 선언해서 사용하면, Assertions를 작성하지 않아도 해당 함수를 사용할 수 있다.

 


▷ findByName() 함수 테스트 케이스 작성


▷ findAll() 함수 테스트 케이스 작성


▶ 전체 실행 시, 테스트 케이스의 동작

클래스 전체를 실행 시키게 되면, 순서에 상관없이 테스트가 진행되며 특히 테스트 과정 중에 삽입한 데이터가 지워지지 않아 오류가 난 것을 확인할 수 있다.


♥ 해결방안 

[1] MemoryMemberRepository.java에서 clear 함수 만들기
MemoryMemberRepositoryTest.java에서 @AfterEach 어노테이션이 붙은 afterEach 함수 생성하기

테스트에서 데이터를 지우지않으면, 오류가 난다.
테스트는 서로 순서상관없이 / 의존관계없이 설계가 되어야한다. --> 하나의 테스트 마다 공용 데이터는 지우기!! 중요
728x90

+ Recent posts