#시작하며
모두가 테스트를 싫어하지만 최근 TDD환경이 트렌드로 되면서 Junit을 활용해 테스트코드를 짜는 개발방식이 중요해졌다.
Test Driven Development (Write test first, then code)
#Junit5 라이브러리 활용 방법 (vs code)
1. 아래 jar파일을 받아서 폴더에 저장한다.
mvnrepository.com/artifact/org.junit.platform/junit-platform-console-standalone
Maven Repository: org.junit.platform » junit-platform-console-standalone
Module "junit-platform-console-standalone" of JUnit 5. VersionRepositoryUsagesDate1.7.x1.7.0Central1Sep, 20201.7.0-RC1Central 0 Aug, 20201.7.0-M1Central 0 Apr, 20201.6.x1.6.3Central 0 Oct, 20201.6.2Central 0 Apr, 20201.6.1Central 0 Mar, 20201.6.0Central 0
mvnrepository.com
2. 저장된 jar파일의 경로를 Preferences : Open settings (Ctrl + Shift + P)를 통해 settings.json을 찾아서 아래 경로를 세팅한다.
"java.project.referencedLibraies": 부분 추가
#Junit5 특징과 구조
Junit5는 Jupiter / Vintage / EXT(3rd party)의 API로 구성되어 있다. 이 3가지 API가 Platform(Junit engine)에 실행되어 Junit을 사용할 수 있다.
- Jupiter : Junit5에 새로운 테스트 문법들이 들어 있다.
- Vintage : Junit4까지 있었던 레거시 문법들을 활용할 수 있다.
- EXT : 3rd party의 테스트 문법들이 들어있다.
Maven surefire plugin을 활용해 테스트 코드를 실행하여 로컬 서버에서 결과를 볼 수 있다.
# Junit5 문법
[annotaion]
@Test : Junit Engine에게 테스트 java파일임을 알려주는 annotation.
@BeforeEach / @AfterEach : 각 @Test 전/후에에 작업을 하여 Duplication작업을 없앨 수 있다.
@BeforeAll / @AfterAll :모든 @Test 전/후에 실행된다.
MathUtils mathUtils;
@BeforeAll
static void beforeAllInit(){ //static으로 해야함.
System.out.prinln("This needs to run before all");
}
@BeforeEach
void init(){
mathUtils = new MathUtils();
}
@AfterEach
void cleanUp(){
System.out.prinln("Cleaning up");
}
@DisplayName : Junit 테스트 제목이름을 다르게 보여준다.
@Disabled : 해당 케이스를 Skip한다
@Test
@Disabled
@DisplayName("TDD method. Should not run")
void testDisabled(){
fail("This test should be disabled");
}
@Enabled 와 @Disabled 조건에 따른 다양한 어노테이션.
@DisabledOnOs / @EnabledOnOs
@DisabledOnJre / @EnabledOnJre
@DisabledIfSystemProperty / @EnabledIfSystemProperty
@DisabledIfEnvironmentVariable / @EnabledIfEnvironmentVariable
@DisabledIfSystemProperty and @EnabledIfSystemProperty,
@Nested : 케이스의 종류와 크기가 늘어나면서 그룹핑이나 organize가 필요한 경우 사용한다.
@RepeatedTest : 테스트 횟수를 늘릴 수 있다.
@Tag : 테스트의 종류마다 remark를 남길 수 있다.
[Assertions]
assertEquals(expected, actual);
- expected와 actual값이 맞는지 비교할 수 있은 테스트 문법
- assertArrayEquals, assertIterableEquals를 활용해 배열과 Collection 자료형도 비교가 가능하다.
- assertAll을 활용해 한번에 여러 케이스를 테스트 할 수 있다.
Asserting exceptions with assertThrows
@Test
void testDivide(){
MathUtils mathUtils = new MathUtils();
assertThrows(ArithmeticException.class, ()-> mathUtils.divide(1,0));
//예상되는 Exception을 적는다 //해당 매소드를 실행
}
[Assumtion]
assumeTrue(boolean value);
- value라고 assume하고 테스트한다.
[TestInfo and TestReporter]
- init()에 TestInfo객체를 생성해 놓고, logging활용에 좋음
[Stateful한 테스트 코드]
@TestInstance 를 활용하여 Stateful한 테스트 코드를 작성한다.
package test;
import org.junit.Test;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestMethodOrder;
@TestInstance(TestInstance.Lifecycle.PER_CLASS);
@TestMethodOrder(MethodOrderer.OrderAnnotation.class);
public class StatefulTest {
private int number;
@Test @Order(1)
void test1(){
System.out.println(number++);
}
@Test @Order(2)
void test2(){
System.out.println(number++);
}
}
'Backend > Java' 카테고리의 다른 글
[Java] 선택문, 반복문 (0) | 2021.01.18 |
---|---|
Java 예외 처리 정리 (0) | 2021.01.16 |
연산자 (3주차) (0) | 2021.01.12 |
자바 데이터 타입, 변수 그리고 배열 (2주차) (0) | 2021.01.11 |
JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (1주차) (0) | 2021.01.10 |