Junit 5는 가장 최근에 개발된 JUnit으로 매우 쉽고 간결하게 테스트 코드를 작성할 수 있다는 장점이 있다. JAVA4를 사용했던 Junit4와는 다르게 JAVA8을 사용하기 때문에, lambda등 최근 많이 사용되는 식들을 사용할 수 있다.
Junit 5의 아키텍처는 다음과 같다.
수업에서 gradle과 IntelliJ를 사용하기 때문에 JUnitPlatform을 사용하였다.
테스트 라이프 사이클
테스트 라이프 사이클은 테스트가 실행될 때 생명주기이다. Junit5에서는 총 5가지의 어노테이션이 존재한다. 우선, 테스트라이프 사이클 순서를 간단하게 그림으로 나타내면 다음과 같다.
각 어노테이션들에 대해 자세히 알아보자.
@BeforeAll
BeforeAll은 static method로 class 단위로 수행된다. 그렇기 때문에 Test코드 실행 최조 딱 한 번만 시행되고 해당 test class가 끝날 때까지 시행되지 않는 어노테이션이다.
@BeforeEach
BeforeEach는 테스트 메소드 갯수만큼 실행되는 어노테이션이다. 테스트 메소드의 실행이 시작할 때, 시행된다.
@Test
실제로 테스트를 진행하는 곳이다, 해당 어노테이션이 붙은 부분이 테스트코드이다.
@AfterEach
실행이 종료되었음을 알리는 어노테이션이다. BeforeEach와 비슷한데, BeforeEach는 Test수행 직전에 시행되고, AfterEach는 Test수행 직후에 시행된다는 차이점이 있다.
@AfterAll
AfterAll은 BeforeAll과 유사하다. static method이고, class단위로 수행된다. 그렇기 때문에 Test코드 실행 최초 한 번 실행되고 해당 test class가 종료되기 전까지 실행되지 않는다.
이해를 돕기 위해 예시코드를 가져왔다.
@displayName("학점 계산 프로그램")
class Grader1LifecycleTest{
@BeforeAll
static void setUpClass(TestInfo testInfo){
System.out.println("Before Start : " + testInfo.getDisplayName());
}
@AfterAll
static void tearDownClass(TestInfo testInfo){
System.out.println("AfterAll start : "+testInfo.getDisplayName());
}
Grader grader;
@BeforeEach
void setUp(TestInfo testInfo){
System.out.println("BeforeEach start : "+testInfo.getDisplayName());
grader = new Grader();
}
@AfterEach
void tearDown(TestInfo testInfo){
System.out.println("AfterEach start : "+testInfo.getDisplayName());
}
@Test
public void should_GivenGradeOfA_ForStudentswithMoreThan90pts(){
double midscore = 92;
double finalscore3 = 90;
double hwScore = 95;
Grade actual = grader.computeGrade(midscore, finalScore, hwScore);
assertEquals(Grade.A, actual, "Should be A")
}
}
'학교 수업 > sw설계 및 테스트' 카테고리의 다른 글
[SW 설계 및 테스트] 테스트 주도 개발 (0) | 2023.06.13 |
---|---|
[SW설계 및 테스트] gradle 알아보기 및 설치하기 (0) | 2023.06.12 |