ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • junit5 맛만 보기
    카테고리 없음 2023. 4. 21. 15:26
    junit5가 아직 릴리즈는 안되었지만 조만간 될듯 싶다. 그래서 중요 내용보다는 바뀐 부분을 살짝 알아보자. 일단 패키지명이 바뀌었다. 또한 메이븐의 GroupId와 ArtifactID도 바뀌었다. 문서를 보면 더 자세히 알 수 있다.
    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>${junit.vintage.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    
    junit5만 쓴다면 위에 jupiter만 쓰면 되는데 필자는 테스트를 위해 vintage까지 넣었다. vintage는 기존의 junit4가 포함되어 있다. 아직 상세하기 보진 않아서 그런것만 같다.
    public class Junit4Test {
      public Junit4Test(){
      }
    
      @BeforeClass
      public static void beforeClass(){
        System.out.println("beforeClass");
      }
    
      @Before
      public void setup(){
        System.out.println("setup");
      }
    
      @Test
      public void test1(){
        System.out.println("test1");
      }
      @Test
      public void test2(){
        System.out.println("test2");
      }
    
      @After
      public void after(){
        System.out.println("after");
      }
    
      @Ignore
      @Test
      public void ignore(){
        System.out.println("ignore");
      }
    
      @AfterClass
      public static void afterClass(){
        System.out.println("afterClass");
      }
    }
    
    위의 코드는 junit4의 코드이다. 다들 아시다시피 기본적인것만 넣었다. 잠깐 설명하자만 @BeforeClass는 static 메서드어야 하며 테스트를 실행시 최초 한번만 실행되는 어노테이션이다. 그리고 @Before는 테스트 실행시마다 실행되는 어노테이션이고 @Test는 말그대로 테스트를 실행하는 것이다. @Ignore는 테스트를 무시한다는 내용이고 @After는 테스트 종료시마다 실행된다. 마찬가지로 @AfterClass는 마지막에 한번 호출된다. 이 역시 static 이어야 한다. 참고로 모든 메서드가 public 이어야 하며 생성자 또한 public 이어야 한다. 그럼 다음으로 junit5를 보자.
    class StandardTests {
    
      StandardTests(){
    
      }
    
      @BeforeAll
      static void beforeAll() {
        System.out.println("BeforeAll");
      }
    
      @BeforeEach
      void beforeEach() {
        System.out.println("BeforeEach");
      }
    
      @Test
      void test1() {
        System.out.println("test1");
      }
      @Test
      void test2() {
        System.out.println("test2");
      }
    
      @Test
      @Disabled("for demonstration purposes")
      void disabled() {
        System.out.println("Disabled");
      }
    
      @AfterEach
      void afterEach() {
        System.out.println("AfterEach");
      }
    
      @AfterAll
      static void afterAll() {
        System.out.println("AfterAll");
      }
    }
    
    딱 보면 알듯 싶다. @BeforeAll는 @BeforeClass와 동일하고 @BeforeEach는 @Before와 동일하다. 나머지도 동일하고 @Ignore도 @Disabled로 바뀌었다. 근데 여기서 좀 많이 바뀐부분이 있다. class가 public이 아니어도 되고 메서드도 또한 public 메서드가 아니여도 상관없다. 또한 생성자도 public이 아니여도 된다. 생성자는 private이어도 가능하다. 하지만 기본 생성자는 있어야 한다. @Test 어노테이션은 제외한 나머지는 private로 만들어도 잘 동작한다. 하지만 @Test를 private로 할경우에는 에러는 나지않지만 테스트를 진행하지 않는다. 그리고 원래 있었는지는 잘 모르겠지만 @DisplayName이라는 어노테이션이 있다. 뭐 딱히 테스트에 연관되지는 않았지만 테스트명을 바꿀수 있다. 문서에 나와있는 소스이다.
    @DisplayName("A special test case")
    class DisplayNameDemo {
    
      @Test
      @DisplayName("Custom test name containing spaces")
      void testWithDisplayNameContainingSpaces() {
      }
    
      @Test
      @DisplayName("╯°□°)╯")
      void testWithDisplayNameContainingSpecialCharacters() {
      }
    
      @Test
      @DisplayName("")
      void testWithDisplayNameContainingEmoji() {
      }
    }
    
    세번째는 이모티콘도 넣을 수 있는데 인텔리j에서는 이모티콘이 안들어간다. 필자가 모르는것 일 수 도 있다. 실행을 시키면 아래와 같이 나올 것이다. junit5 이 외에도 좋은 점이 많아졌다고 생각되지만 아직 쓸일이 없기에 맛만 보자. 릴리즈 되면 그때다시 살펴보도록 하자!. 소스도 올려놓긴 하지만 딱히.. 별거 없다. https://github.com/wonwoo/junit5-example.git

    댓글

Designed by Tistory.