스프링 - 테스트 주도 개발, JUnit

lacblueeun·2020년 11월 20일
0

Spring

목록 보기
6/6
post-thumbnail

🎄 최근에 대부분의 서비스 회사가 테스트 코드에 관해 요구하고 있습니다. 프로젝트를 하면서 테스트의 필요성을 알게됐고, 더 자세하게 알기위해 정리를 시작했습니다.

1. TDD(Test-Driven Development) 테스트 주도 개발

TDD는 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나로 애자일 방법론중 하나이다. 테스트가 주도하는 개발을 말한다. 즉 테스트 코드를 먼저 작성하는 것부터 시작합니다.

1-1. TDD 사용 이유

  1. 객체지향적인 코드 개발
    테스트 코드를 먼저 작성한다면, 좀 더 명확한 기능과 구조를 설계할 수 있다. 각 기능들에 대해서 철저히 구조화 시켜 코드를 작성할 수 있다. 자연스럽게 코드의 재사용성을 보장한다.

  2. 설계 수정 시간의 단축
    미리 테스트 시나리오를 작성해봄으로써 코드 개발 전 기능을 구현하기 위한 예외 상황들을 미리 확인하고, 조사하게 되는 효과로 설계의 구조적 문제를 바로 찾아낼 수 있다.

  3. 디버깅 시간의 단축
    기본저으로 단위 테스트 기반의 테스트 코드를 작성하기 때문에 추후 문제가 발생하였을 때 각각의 모듈 별로 테스틀 진행해보면 문제의 지점을 쉽게 찾아낼 수 있다.

  4. 유지 보수의 용이성
    입력과 출력의 흐름이 명확해지고 추후 구조의 변경 및 소스 수정 시 구조를 쉽게 파악하고 빠른 수정이 가능해진다.

  5. 테스트 문서의 대체 가능
    TDD를 구현하게 될 경우에 테스팅을 자동화 시킴과 동시에 보다 정확한 테스트 근거를 산출 할 수 있다.
    TDD의 사용이유 참고

2. 단위 테스트

단위 테스트는 TDD의 첫 번째 단계인 기능 단위의 테스트 코드를 작성하는 것을 이야기합니다. 순수하게 테스트 코드만 작성하는 것을 이야기한다.

  • 테스트 코드를 작성하면 톰캣을 계속 올렸다 내렸다 할 필요가 없습니다. 테스트 코드를 작성하면 더는 사람이 눈으로 검증하지 않게 자동검증이 가능하다.
  • 개발자가 만든 기능을 안전하게 보호해준다. 새로운 기능을 추가될 때, 기존 기능이 잘 작동되는 것을 보장해 주는 것이 테스트 코드입니다.

3. JUnit ?

JUnit은 자바 프로그래밍 언어용 유닛 테스트 프레임워크이다. JUnit은 테스트 주도 개발 면에서 중요하다. 테스팅 결과를 단순히 문서로 남기는 것이 아니라 Test class를 그대로 남김으로써 추후 개발자에게 테스트 방법 및 클래스의 History를 넘겨줄 수 있다.

3-1 JUnit 환경 설정

1.Maven을 통해 쉽게 추가
2.poem.xml 에 dependency를 추가한다.

3-2 JUnit Assert method (단정문)

assertArrayEquals(a, b) : 배열 a와 b가 일치함을 확인
assertEquals(a, b) : 객체 a와 b의 값이 같은지 확인
assertSame(a, b) : 객체 a와 b가 같은 객체임을 확인
assertTrue(a) : a가 참인지 확인
assertFalse(a) : a가 거짓인지 확인
assertNotNull(a) : a객체가 Null이 아님을 확인

3-3 JUnit Function Flow

setUp() : 테스트 대상 클래스의 실행전에 가장 먼저 setUp()을 실행
tearDown() : 가장 마지막에 수행되며 setUp()의 반대 개념으로 생각한다.

위에 함수는 Test Case를 진행할 때 마다 반복적으로 실행한다.

3-4 JUnit Annotation

@Test : 해당 메서드는 Test대상 메서드임을 확인한다.
@BeforeClass : 해당 테스트가 시작 전에 딱 한번씩만 수행되도록 지정한다.
@AfterClass : 해당 테스트가 끝나고 딱 한 번씩만 수행되도록 지정한다.
@Before : 해당 테스트가 진행이 시작되기 전에 작업할 내용을 호출한다.
@After : 해당 테스트가 진행이 끝난 후에 작업할 내용을 호출한다.

profile
Go for Frontend Developer 🧪

0개의 댓글