Rest WEB Service with Spring boot 의존성 주입, 단위테스트

홍성우·2023년 2월 22일

spring boot

목록 보기
2/3

github주소: https://github.com/hongsdf/Electronic_center/tree/master

Rest 웹 서비스를 만드는 과정에서
의존성 주입(DI)에 대해 다시 정리해 보려고 한다.

의존성 주입 방법1

	@Autowired
	private ElectronicStore elelctronicStroe; // 필드 주입
    
    @REAN으로 등록된 구현체를 찾아 ioc컨테이너가 주입해준다.

의존성 주입 방법2

	생성자 주입
    private ElectronicStore elelctronicStroe;
    
    public ElectronicServiceLogic(ElectronicStore elelctronicStroe){
    	this.electronicStore = electronicStore;
    }

의존성 주입 방법3

	lomok기능을 확용하여 주입하는 방법
    @RequiredArgsConstrucor 
    
    클래스 위에 @RequiredArgsConstrucor 을 선언하고
    
    필드를 private final로 생성한다.
    final의 의미는 무조건 한번은 초기화가 되어야한다.
    
    private final ElectronicStore elelctronicStroe; // 선언

JUnit 단위테스트

JUnit5을 기반으로 테스트 해보았다.
각 기능별로 테스트 진행 예시에서는 Service에 대한 단위 테스트 이다.

test 디렉토리 밑에 구성한다.

테스트 단위에 대한 bean은 3가지중 @Autowired밖에 사용할 수 없다.(유의)


단위테스트를 진행한다.

테스트를 진행하기 전 := 보통 이곳에 객체를 생성하는 테스트 케이스를 입력한다.

테스트를 진행한 후 실행되는 메서드

결과는 크게 3가지로 나뉜다.
성공

예상 값과 다른값인 경우

그림과 같이 예상값과 다른값이 나온 경우 이다.

에러
필드에 @Autowired를 선언하지 않은경우 발생한 에러이다.
즉 테스트할 BEAN이 없다는 얘기므로 NPE가 발생하였다.

궁금한점

클라이언트와 json형태로 주고 받는다.
잘 동작 되었는지 테스트 하기 위한 방법으로 Rest Client(insonmia) 방법과
Junit테스트가 존재한다.

이둘의 차이점이 뭘까?
일단 목적은 똑같다. 클라이언트 요청에대한 메서드 처리이다.
하지만 insonmia와 같은 Rest client에는 기능별로 테스트를 해보아야한다.

junit테스토 기능별 메서드를 작성하는 것은 동일하다.
하지만 테스트 마치고 실제 운영서버에 배포할때를 생각해 보자
배포과정 전 프로그래머가 소스를 수정 후 maven,gradle로 jar파일을 생성할때 TEST과정을 자동으로 거치게 된다. 만약 여기서 에러가 발생하면 빌드가 되지 않는다.

그림처럼 내부적으로 TEST과정을 거친다. 그러므로 단위테스트가 더 안전하다.

단위 테스트 메서드 mockMVC,objectMapper

mockMVC는 WEB 테스트 단위를 지원하게 된다. 즉( GET("/location"))이러한 형식으로 테스트 기능을 지원하는 클래스이다.
objectMapper는 데이터 타입을 json형태로 변경해주는 기능을 지원한다.

profile
제 블로그를 방문해 주셔서 감사합니다

0개의 댓글