티스토리 뷰

2021.01.10

단위 테스트를 위한 코드 작성을 할 수 있다. TDD랑은 다르다. TDD는 테스트 코드를 먼저 작성하는 것이 시작이다.

 

단위테스트와 TDD의 차이

 


TDD

RED - 항상 실패하는 테스트를 먼저 작성

GREEN - 테스트가 통과하는 프로덕션 코드 작성

REFACTOR - 테스트가 통과하면 프로덕션 코드를 리펙토링 합니다.

 

단위테스트

단지 기능 단위의 테스트 코드를 작성하는 것을 이야기 한다. 꼭 테스트 코들르 먼저 적성한느 것을 포함지 않고 리펙토링도 포함하지 않는다.

 

 

테스트코드 작성이유


  • 단위 테스트는 개발단계 초기에 문제를 발견하게 도와줌

  • 나중에 코드를 리팩토링하거나 라이브러리 업그레이드 등을 할 때 기존 기능이 올바르게 작동하는 지 확인할 수 있음

  • 기능에 대한 불확실성 감소

  • 단위 테스트 자체가 문서로 사용될 수 있다.

node로 서비스를 만들 때, 서버에 올려서 실행시키고 요청을 하고 console로 찍고... 같은 작업은 매번 코드를 수정할 때 마다 반복해야했다.

 

테스트 코드를 작성하면 이런 작업 없이 자동으로 검증이 가능하다. 또한 새로운 기능이 추가 될 때 기존 기능이 잘되는 것을 보장하기 때문에 기능 단위로 문제를 해결 할 수 있다. 개발자의 기술이자 습관화 되어야 하는 부분이다.

 

 

JUnit - 자바의 테스트 코드 작성 프레임워크


3개의 하위 프로젝트 기존 JUnit.Test -> JUnit.jupiter.api.Test;

Jnuit4를 많이 사용하지만 최신 버전이 나왔으니가 Junit5를 통해 테스트 코드를 작성하자.(최신)

스프링 이니셜라이져로 만든 프로젝트는 이미 JUnit5가 적용되어있다.( 참고 : goddaehee.tistory.com/210)

 

어노테이션

@ - 자바의 어노테이션(사전적 의미는 주석) - 프로그램에게 추가적인 정보를 제공해주는 메타데이터. 런타임에 해석된다.

빌트인도 있고 커스텀도 가능함 스프링에는 스프링의 어노테이션이 적극 활용된다.

  • 컴파일러에게 코드 작성 문법이나 에러를 체크하도록 정보 제공

  • 코드를 자동으로 생성할 수 있도록 정보 제공

  • 실행시 특정 기능을 실행하도록 정보를 제공

 

이게 문제가 아니라


 

그게 문제가 아니라 자꾸 책에서 나온 실습환경과 개발환경의 차이가 있어서(최신버전 사용) import 부분에서 변경사항으로 인해 막힘... 달라도 이렇게 다를 줄은 몰랐다. 해결하면서 아는 재미도 있는거니까 시간이 오래걸래도 해보기

실습환경은 Junit4를 사용해서 Runwith이라는 어노테이션을 사용하는데 Junit에서는 Import 조차 안됌... 기본적은 Test import도 다른 루트로 변경 되어 있었다. 아무튼 검색을 해보니 Runwith이 extnedwith으로 변경된 듯 하다. 이 상태라면 목적없이 책을 그대로 따라하는 것은 의미가 없는 것 같다. 우선 그래도 ㄱㄱ

//Junit5 어노테이션
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.test.context.junit.jupiter.SpringExtension;

@ExtendWith(SpringExtension.class)

 

해보니까 Spring관련 import는 거의 동일하다.

 

 

이게 문제가 아니라2


디렉토리...잘못설정했는데 지금까지 몰랐음 ...

 

""

내부 톰캣 서버를 실행하는 진입점이라고 할 수 있는 @SpringBootApplication를 작성한 클래스는 패키지의 최상단 혹은 동일한 레벨에 위치해야 한다. @SpringBootApplication은 여러가지 어노테이션 기능을 합친 어노테이션. 그 중 하나가 @ComponentScan. 이 어노테이션의 기능은 현재 위치에서 시작해 서브 패키지를 훑으면서 클래스를 스캔하는데 엉뚱한 패키지에 작성하면 컨트롤러를 못 찾기 때문에 404 에러가 발생한다..

""

패키지의 최상단이라는 의미는 다음과 같습니다. 컨트롤러 클래스가 com.web.controller 패키지에 있다면 메인 메소드가 있는 클래스는 com.web이나 com 패키지에 있어야 합니다. com.web.project에 있다거나 com.wweb에 있으면 안된다. 같은 계층 구조 안에 있어야한다.

그런데 나는 패키지파일 바로 안에 web디렉토리를 생성해서...ㅋ 처음이라 어색해서 이런 실수도 잡기힘들다 하지만 꾸준히 보다보면 된다. 사람은 계속 툭툭 치다 보면 금방 익숙해진다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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
글 보관함