-
-JavaNextStep (1) - Junit언어/JAVA 2023. 7. 10. 15:10
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 :
https://codedragon.tistory.com/4926
https://beststar-1.tistory.com/28#assertThrows(expectedType,_executable)
'언어 > JAVA' 카테고리의 다른 글
스트림(1) - 스트림이란,리소스로 스트림 얻기 (0) 2023.07.14 - JavaNextStep - 숫자야구게임(1) - 단위테스트 (0) 2023.07.10 컬렉션 예시들 (0) 2023.07.09 컬렉션 (0) 2023.07.09 어노테이션 (0) 2023.07.08