학교 수업/sw설계 및 테스트

[SW설계 및 테스트]Junit 5

부농쿼카 2023. 6. 13. 10:04
728x90

Junit 5는 가장 최근에 개발된 JUnit으로 매우 쉽고 간결하게 테스트 코드를 작성할 수 있다는 장점이 있다. JAVA4를 사용했던 Junit4와는 다르게 JAVA8을 사용하기 때문에, lambda등 최근 많이 사용되는 식들을 사용할 수 있다.

 

Junit 5의 아키텍처는 다음과 같다.

Junit5 아키텍처

수업에서 gradle과 IntelliJ를 사용하기 때문에 JUnitPlatform을 사용하였다.

 

테스트 라이프 사이클

테스트 라이프 사이클은 테스트가 실행될 때 생명주기이다. Junit5에서는 총 5가지의 어노테이션이 존재한다. 우선, 테스트라이프 사이클 순서를 간단하게 그림으로 나타내면 다음과 같다.

Test Life Cycle

각 어노테이션들에 대해 자세히 알아보자.

 

@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")
    }
}

실행 결과

728x90