-JavaNextStep (1) - Junit
1. 객체지향 생활 체조 원칙
- 한 메서드에 오직 한 단계의 들여쓰기만 한다.
- else 예약어를 쓰지 않는다.
- 모든 원시 값과 문자열을 포장한다.
- 한 줄에 점을 하나만 찍는다.
- 줄여 쓰지 않는다(축약 금지).
- 모든 엔티티를 작게 유지한다.
- 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
- 일급 컬렉션을 쓴다.
- getter/setter/프로퍼티를 쓰지 않는다.
2. 단위테스트란?
- 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트이다.
- 여기서 모듈은 애플리케이션에서 작동하는 하나의 기능 또는 메소드이다.
2.1 main method의 용도
> 프로그램 시작
> 구현 프로그램 테스트
> main method는 프로덕션코드 프로그램 구현을 담당하는 부분으로, 실제 사용하는 소스코드이다.
>test코드는 프로덕션 코드가 정상적으로 작동하는지 확인하는 테스트이다.
- main method 테스트의 문제점
> Production code와 Test Code가 클래스 하나에 존재한다. (클래스 크기, 복잡도 증가)
> Test Code가 실 서비스에 같이 배포된다.
> method 이름을 통해 어떤 부분을 테스트하는 지에 대한 의도를 드러내기 힘들다.
> 테스트결과를 수동으로 확인해야한다.
2.2 JUnit
- main method 활용해 테스트할 때 발생하는 문제점을 해결하기 위해 등장한 도구
JUint 5.x버전
> 어노테이션을 활용한 테스트코드 구현
@ Test,@BeforeEach,@AfterEach 등 이용 (org.junit.jupiter.api)
Assertions 클래스의 static assert method를 활용해 테스트 검증
JUint 4.x버전
> 어노테이션을 활용해 테스트코드 구현
패키지 위치와 이름만 다르고 동일함 (org.junit.Test)
3. Junit 버전 및 사용법
3.1 Junit 구성
- 제이유닛 플랫폼,주피터,빈티지 3개의 모듈로 구성되어 있다.
- 이 중 주피터 플랫폼이 핵심 모듈이다. ( IDE에 내장됨)
- 그 외 주피터는 프로그래밍 모델과 확장모델, Vintage는 이전 버전의 Juint을 지원하는 모듈이다.
3.2 필요라이브러리
- JUint5 : 단위 테스트를 돕기위한 테스팅 프레임워크
- AssertJ : 테스트를 돕기 위해 다양한 문법을 지원하는 라이브러리
- given/when/then 패턴
1개의 단위 테스트를 3가지 단계로 나누어 처리하는 패턴이다.
given: 데이터 준비
when : 어떤 함수 실행
then : 어떤 결과나와야한다.
3.3 Junit 어노테이션
1. @Test
> 테스트 메소드
> private 혹은 static이면 안된다.
> 테시트 메서드들의 실행 순서는 대부분 위에서 아래이지만, 순서 보장x
> 순서를 보장하고 싶으면 @TestMethodOrder를 정해주자
2. @DisplayName
>메서드 이름 혹은 설명을 추가할 수 있다.
3. DisplayNameGeneration
> 테스트 클래스에 적용하여, 테스트 메서드들의 출력되는 이름을 일괄변경가능
4. @BeforeEach, @AfterEach
>테이스 실행전 실행 후 반복적으로 호출
> 해당 어노테이션이 붙은 메서드에서 변수를 할당할 경우, 테스트 메서드에서 동일한 값으로 테스트 가능
5. @BeforeAll, @AfterAll
>테스트 메소드가 실행되기전, 모두 실행된 후 실행되는 메서드
>해당 클래스의 테스트 실행 전 한번, 모두 실행 후 한번 (클래스와 생명주기가 같다 static mehod로 선언한다)
6. @Disabled
>테스트 메서드를 실행하지 않는 상태로 만든다.
7. @TestMethodOrder
> 메서드 실행순서 정의
> TestClassOrder아 TestMethodOrder가 같은 이름의 메서드로 순서를 정의하고 있어 import 잘해야함
8. @Timeout
>메서드 클래스 등 시간 제약을 두고 해당 제약시간을 초과하면 테스트를 실패처리한다.
3.4 assert method
assertEquals(x,y) | 객체 x와 y가 일치함 확인 x(예상값) y(실제값) 같이면 통과 |
assertArrayEquals(a,b) | 배열 a,b가 일치함 확인 |
assertFalse(x) | x가 false인지 확인 |
assertTrue(x) | x가 true인지 확인 |
assertTrue(message,condintion) | condition이 true면 message표시 |
assertNull(o) | 객체가 null인지 확인 |
assertNotNull(o) | 객체가 null이 아닌지 확인 |
assertSame(ox,oy) | 두 객체가 같은 객체임을 확인 equals는 값을 확인하고 same은 같은 참조인지 확인 |
assertNotSame(ox,oy) | ox,oy가 같은 객체 참조 x면 통과 |
assertfail() | 테스트 실패처리 |
+ assertThrows(expectedType,executable)
executable에서 expectedType의 예외가 발생했는지 확인
assertTimeout(duration,excutable)
특정 시간 안에 실행이 완료되는지 확인, 두번째 매개변수의 람다문이 종료되어야 테스트 끝
* 추가
No tests found for given includes Error
해결법
Run test using -> Gradle에서 Intellij IDEA로 변경
*어노테이션 사용할 때
import org.junit.jupiter.api.*;
잘 확인하기 ! 잘못 추가하면 junit 4.xx로 작동하는 경우 사용법이 달라서 이상해질 수 있다!
참고자료:
자바 nextstep :
NEXTSTEP
edu.nextstep.camp
https://codedragon.tistory.com/4926
JUnit - 단정(assert) 메소드
단정 메소드(assert method) · JUnit에서 가장 많이 이용되는 단정(assert) 메소드입니다. · 단정 메서드로 테스트 케이스의 수행 결과를 판별합니다.
codedragon.tistory.com
https://beststar-1.tistory.com/28#assertThrows(expectedType,_executable)
JUnit 대표적 단정(Assert) 메서드, 라이프사이클(Lifecycle) 메서드
단정(Assert) 메서드 테스트 케이스의 수행 결과를 판별하는 메서드를 말한다. 아래에서 대표적인 단정 메서드 몇개만 알아보도록 하자. 참고로 이는 모두 org.junit.jupiter.api.Assertions 패키지에 있다.
beststar-1.tistory.com
[JUnit] JUnit5 기초지식 annotation 정리
Junit5의 요약된 기초지식에 대한 내용은 아래에서 확인 가능하다. 2023.02.18 - [IT/JAVA | Spring] - [JUnit] JUnit5 기초지식 정리( 설정, annotation, assertions ) [JUnit] JUnit5 기초지식 정리( 설정, annotation, assertions
kangyb.tistory.com