본문 바로가기

Web/기초

[Web] Java Testing Framework - Unit Test(JUnit)

들어가면서

1. TDD

테스트 주도 개발(Test-Driven Development, TDD)은 매우 짧은 개발 사이클을 반복하는 소프트퀘어 개발 프로세스중 하나입니다.  쉽게 얘기하면 개발을 하는데 있어서 테스트가 주가 되어 개발한다는 의미 입니다. 제품의 테스트가 좋을수록 제품의 품질이 향상 됩니다. 그래서 테스트는 중요하다고 생각합니다.

  • 기존 개발 프로세스
    1. 설계
    2. 개발(코드 작성)
    3. 테스트(코드 작성)
  • TDD 프로세스
    1. 설계
    2. 테스트(코드 작성)
    3. 개발(코드 작성)

TDD 방법론을 사용할 경우 아래의 같은 장점, 단점이 있습니다.

  • 장점
    1. 객체지향적인 코드 개발 - 모든 코드가 재사용 성을 기반으로 작성하기 때문
    2. 설계 수정 시간의 단축 - 테스트 코드를 먼저작성하기 떄문에 설계의 구조적 문제점을 바로 찾음
    3. 디버깅 시간의 단축 - 추후에 문제가 발생했을 때 전체 소스 디버깅이 아닌, 테스트 코드의 단위별로 디버깅 진행
    4. 유지보수의 용이성 - 입출력의 흐름이 명확해져서, 추후 구조 변경 및 소스 수정시 빠른 수정이 가능
    5. 테스트 문서의 대체 - 내부적인 모듈별로 테스트 제공, 테스트 자동화
  • 단점
    1. 생산성 저하 - 처음부터 2개의 코드를 짜야하고, 중간중간 테스트를 해서고쳐나가야 함(마감일이 중요한 경우 비효율성)
    2. 개발자 본인의 변화 - 기존에 해왔던 방식이 아닌 다른 방식으로 개발을 진행

2. 단위 테스트

다른 테스트와 독립적(타사/외부 서비스의 인터페이스 테스트 X)이며, 메서드나 클래스 단위를 대상으로 입/출력 테스트를 하는 것 입니다.

3. 단위 테스트 프레임 워크

Testing Framework란?

Java 테스트 프레임워크는 미리 작성된 코드를 제공하기 위해 미리 작성된 패키지 그룹을 지원하고 관리하는 데 사용됩니다. 개발자는 데이터 소스 링크, 예외 처리 등과 같은 기본 기능에 대한 코드를 작성하는 것을 방지하여 비즈니스 응용 프로그램의 핵심 논리에 집중할 수 있습니다

 

https://dzone.com/articles/the-best-java-testing-frameworks-to-focus-in-2021

 

Top Java Testing Frameworks of 2021 - DZone Java

Java Testing Frameworks provide standardized, extendable ways for programmers and developers to build any software application or web apps. In other words

dzone.com

 

위 글을 보면 Java Testing Framework들을 확인할 수 있습니다. 그러나, 구글 검색 시 JUnit외에는 커뮤니티 및 데이터가 많지 않아서 실제로 사용하기에는 적절하지 않아보입니다.

그래서 JUnit에 대해서 알아보겠습니다.

 

3.1 JUnit이란?

Java 프로그래밍 언어용 유닛 테스트 프레임워크 입니다. (위키백과)

'spring-boot-starter-test' 라이브러리에 포함되어 있습니다.

  • JUnit5(JUnit4와의 하위 호환성을 위한 빈티지 엔진 포함)
  • Spring Test, Spring Boot Test
  • AssertJ
  • Hamcrest
  • Mockito
  • JSONassert
  • JsonPath

※ spring-boot-starter-~~ :  라이브러리 간의 의존성관리 및 버전 충돌에 대한 이슈를 해결해주는 라이브러리

 

3.2 JUnit5(2015.10)

  • 런타임 시 Java8 이상 지원
  • 이전 버전들과 달리 여러 개의 서브 모듈로 나뉘어짐
    • JUnit Platform : 테스트 프레임워크 API 정의(테스트를 발견, 계획 인터페이스 정의)
    • JUnit Jupiter : TestEngine의 실제 구현체, Jupiter-api를 사용하여 작성한 코드를 발견하고 실행, 테스트를 작성하기 위한 확장기능들 포함
    • JUnit Vintage : JUnit3,4 를 JUnit5 플랫폼에서 수행 지원

3.3 JUnit 5 생명주기

JUnit5 생명주기

 

 

 

 

 

 

 

 

 

출처 : 

https://ko.wikipedia.org/wiki/JUnit

 

JUnit - 위키백과, 우리 모두의 백과사전

JUnit(제이유닛)은 자바 프로그래밍 언어용 유닛 테스트 프레임워크이다. JUnit은 테스트 주도 개발 면에서 중요하며 SUnit과 함께 시작된 XUnit이라는 이름의 유닛 테스트 프레임워크 계열의 하나이

ko.wikipedia.org

https://junit.org/junit5/

 

JUnit 5

The JUnit team uses GitHub for version control, project management, and CI.

junit.org

https://m.blog.naver.com/suresofttech/221569611618

 

TDD(Test-driven Development) 소개

최근 화제가 되고 있는 TDD에 대한 관심이 갈수록 깊어지고 있습니다. 과연 TDD란 무엇인지 이번 기...

blog.naver.com

https://manorgass.tistory.com/63

 

테스트 주도 개발 / TDD 의 정의와 장단점

개요 개발자라면 한번쯤은 테스트 주도 개발 (TDD)에 대해 들어봤을 것이다. 테스트 위주의 코드 작성으로 알고있는 TDD의 장점과 단점을 살펴보고 대략적인 이해를 주는 것이 본 포스팅의 목적이

manorgass.tistory.com

https://www.softwaretestinghelp.com/junit-tutorial/#JUnit_Tutorial