🌼단위 테스트(Unit Test)
아주 작은 단위의 기능 테스트
메서드 단위의 코드로 작성
기능 테스트
사용자 입장에서 애플리케이션이 제공하는 기능이 올바르게 동작하는지를 테스트
개발한 애플리케이션과 연관된 대상이 많아 단위테스트라 부르기 힘듦
통합 테스트
클라이언트 측 툴 없이 개발자가 짜 놓은 코드를 실행시켜 하는 테스트
여러 계층과 연관되어 있으므로 단위 테스트라 부르기 힘듦
슬라이스 테스트
애플리케이션을 특정 계층으로 쪼개서 하는 테스트
ex. API 계층 , 서비스 계층, 데이터 액세스 계층
단위테스트라고 부르기엔 단위가 큰 테스트
애플리케이션의 일부만 테스트 가능(Mock 가짜 객체 사용) , 부분통합테스트라고 부르기도 함
단위 테스트의 장점
동작결과를 빠르게 확인할 수 있음
작은 단위의 테스트로 적은 시간안에 문제를 찾아낼 가능성이 높음
버그리포트를 전달 받았을 때 발생 원인을 단계적으로 찾아가기 용이함
🌼단위 테스트 F.I.R.S.T 원칙
Fast 빠르게
테스트 케이스는 동작이 빨라야 함
Independent 독립적으로
각각의 테스트는 독립적이어야 함
Repeatable 반복 가능하도록
어떤 환경에서도 반복 실행이 가능해야 함
Self-validating 셀프 검증이 되도록
단위 테스트 케이스 스스로 성공 또는 실패라는 자체 검증 결과를 보여주어야 한다
Timely 시기 적절하게
단위 테스트는 테스트하려는 기능 구현을 하기 직전에 작성해야 함
🌼JUnit 없이 단위 테스트 적용
단위테스트를 쉽고 빠르게 적용할 수 있는 부분 : 헬퍼(helper)클래스 or 유틸리티(utility)클래스
유틸리티 클래스의 메서드들은 클래스의 객체로 인스턴스화 될 필요가 없기때문에 모두 정적(static)메서드로 구성
-> 객체 지향적인 시각으로 사용 지양하려고 하지만 많이 사용하고 있음
given - when - then
BDD 테스트 방식
Given
테스트의 준비 과정
테스트를 위한 전제조건 포함
테스트 대상에 전달되는 값(테스트 데이터)
When
테스트의 동작(대상) 지정
메서드의 호출로 테스트 진행
Then
테스트의 결과 검증
예상하는 값(expected)과 테스트 대상 메서드의 동작 수행 결과(actual) 값을 비교해서
기대한 대로 동작을 수행하는지 검증(Assertion)하는 코드 포함
🌟Assertion(검증) 이란?
테스트 케이스의 결과가 반드시 참(true)이어야 한다는것을 논리적으로 표현한 것
🌼JUnit
Java 언어로 만들어진 애플리케이션을 테스트 하기 위한 오픈 소스 테스트 프레임워크
Java의 표준 테스트 프레임워크라고 해도 과언이 아님
TestNG라는 JUnit의 강력한 경쟁자가 있지만 Spring Boot의 디폴트 테스트 프레임워크는 JUnit
assertXXXX() 로 시작하는 다양한 Assertion메서드를 지원
JUnit 테스트 케이스의 기본 구조
void 타입의 메서드
@Test 애너테이션 추가
@DisplayName("표시할 이름") 애너테이션 추가
테스트의 예외결과를 예상했을때 일치 한다면 passed 그렇지 않다면 failed이다
🌟Assertion 메서드
예상하는 결과값이 나오는지 테스트할 때 사용
assertEquals(기대하는 문자열, 실제 결과 값)
assertTrue(예상할 대상) / assertFalse(예상할 대상)
assertNotNull(테스트 대상 객체, 테스트 실패시 표시할 메세지) / assertNull(테스트 대상 객체, 테스트 실패시 표시할 메세지)
assertThrows(발생이 될 것으로 예상되는 예외클래스, 람다식으로 테스트 대상 메서드 호출)
🌟테스트 케이스 실행 전, 전처리
@BeforeEach
클래스 레벨에 사용
각 테스트 케이스가 실행될 때 마다 이 애너테이션을 붙인 메서드의 내용들이 실행된 후 해당 테스트 케이스 실행
@BeforeAll()
클래스 레벨에 사용
테스트케이스가 실행되기 전에 딱 한번만 초기화
메서드는 꼭 정적(static)메서드
테스트 케이스 실행 후, 후처리
@AfterEach
@AfterAll
🌟Assumption 메서드
메서드별 특정 조건을 만족할 경우 진행시키고 아닌경우 스킵하는 메소드
assumeTrue() / assumeFalse()
🌼Hamcrest
JUnit기반 단위테스트에서 사용할 수 있는 Assertion Framework
Assertion을 위한 매쳐(Matcher)의 제공으로 읽기편한 문장구성 - 가독성 향상
테스트 실패 메세지를 이해하기 쉬움
Hamcreat에서 지원하는 매쳐(Matcher)
assertThat(테스트 대상의 실제 결과값, 예상하는 값)
assertEquals()를 사용하는 것 보다 하나의 영어 문장으로 자연스럽게 읽혀 더 구체적인 의미 유추가능
실행 결과 또한 자연스럽게 읽힘
is() 가독성을 높이기 위한 decorator
equalTo() 객체가 동일한지 판단
hasToString() 메서드 값과 일치 여부 판단
notNullvalue() / nullValue() Null인지 아닌지 판별
'개발공부🌷 > Spring MVC' 카테고리의 다른 글
Spring MVC 테스팅(Testing)3 (0) | 2023.12.07 |
---|---|
Spring MVC 테스팅(Testing) 2 (0) | 2023.12.06 |
Spring MVC 트랜잭션(Transaction) (0) | 2023.12.05 |
Spring MVC JPA 2 (0) | 2023.11.28 |
Spring MVC JPA (0) | 2023.11.28 |