IT이야기

@Before, @BeforeClass, @BeforeAll과 @BeforeAll 사이의 차이

cyworld 2022. 5. 15. 23:44
반응형

@Before, @BeforeClass, @BeforeAll과 @BeforeAll 사이의 차이

사이의 주된 차이점은 무엇인가?

  • @Before그리고@BeforeClass
    • 그리고 JUnit 5에서@BeforeEach그리고@BeforeAll
  • @After그리고@AfterClass

JUnit Api에 따르면 @Before다음과 같은 경우에 사용된다.

테스트를 작성할 때, 여러 테스트가 실행되기 전에 유사한 개체를 생성해야 한다는 것을 발견하는 것이 일반적이다.

반면에@BeforeClass데이터베이스 연결을 설정하는 데 사용할 수 있다.그러나 할 수 없었다.@Before같은 일을 하십니까?

표시된 코드@Before동안 각 테스트 전에 실행된다.@BeforeClass전체 시험 기구 전에 한 번 주행한다.만약 당신의 테스트 클래스에 10개의 테스트가 있다면,@Before코드는 10번 실행되지만@BeforeClass한 번만 실행될 것이다.

일반적으로, 당신은@BeforeClass여러 테스트에서 동일한 계산적으로 비싼 설정 코드를 공유해야 하는 경우.데이터베이스 연결 설정은 이 범주에 속한다.다음에서 코드를 이동할 수 있는 위치@BeforeClass@Before그러나 당신의 테스트 실행은 더 오래 걸릴 수 있다.코드가 표시됨을 참고하십시오.@BeforeClass정적 이니셜라이저로 실행되므로 테스트 고정장치의 클래스 인스턴스가 생성되기 전에 실행된다.

JUnit 5에서 태그는@BeforeEach그리고@BeforeAll의 등가물.@Before그리고@BeforeClassJUnit 4에.그들의 이름은 그들이 언제 달리는지 좀 더 잘 나타내는데, 느슨하게 해석된다: '각 시험 전에'와 '모든 시험 전에 한 번'이다.

각 주석 간의 차이는 다음과 같다.

+-------------------------------------------------------------------------------------------------------+
¦                                       Feature                            ¦   Junit 4    ¦   Junit 5   ¦
¦--------------------------------------------------------------------------+--------------+-------------¦
¦ Execute before all test methods of the class are executed.               ¦ @BeforeClass ¦ @BeforeAll  ¦
¦ Used with static method.                                                 ¦              ¦             ¦
¦ For example, This method could contain some initialization code          ¦              ¦             ¦
¦-------------------------------------------------------------------------------------------------------¦
¦ Execute after all test methods in the current class.                     ¦ @AfterClass  ¦ @AfterAll   ¦
¦ Used with static method.                                                 ¦              ¦             ¦
¦ For example, This method could contain some cleanup code.                ¦              ¦             ¦
¦-------------------------------------------------------------------------------------------------------¦
¦ Execute before each test method.                                         ¦ @Before      ¦ @BeforeEach ¦
¦ Used with non-static method.                                             ¦              ¦             ¦
¦ For example, to reinitialize some class attributes used by the methods.  ¦              ¦             ¦
¦-------------------------------------------------------------------------------------------------------¦
¦ Execute after each test method.                                          ¦ @After       ¦ @AfterEach  ¦
¦ Used with non-static method.                                             ¦              ¦             ¦
¦ For example, to roll back database modifications.                        ¦              ¦             ¦
+-------------------------------------------------------------------------------------------------------+

두 버전의 주석 대부분은 동일하지만, 거의 차이가 없다.

참조

실행 순서.

점선 상자 -> 옵션 주석.

여기에 이미지 설명을 입력하십시오.

JUnit의 전/전 클래스

함수@Before주석은 다음 클래스의 각 시험 기능에 앞서 실행될 것이다.@Test주석, 그러나 함수@BeforeClass클래스의 모든 테스트 기능 전에 한 번만 실행된다.

유사 함수@After주석은 다음 클래스의 각 테스트 기능 후에 실행될 것이다.@Test주석, 그러나 함수@AfterClass클래스의 모든 테스트 기능 후에 한 번만 실행된다.

샘플클래스

public class SampleClass {
    public String initializeData(){
        return "Initialize";
    }

    public String processDate(){
        return "Process";
    }
 }

샘플 테스트

public class SampleTest {

    private SampleClass sampleClass;

    @BeforeClass
    public static void beforeClassFunction(){
        System.out.println("Before Class");
    }

    @Before
    public void beforeFunction(){
        sampleClass=new SampleClass();
        System.out.println("Before Function");
    }

    @After
    public void afterFunction(){
        System.out.println("After Function");
    }

    @AfterClass
    public static void afterClassFunction(){
        System.out.println("After Class");
    }

    @Test
    public void initializeTest(){
        Assert.assertEquals("Initailization check", "Initialize", sampleClass.initializeData() );
    }

    @Test
    public void processTest(){
        Assert.assertEquals("Process check", "Process", sampleClass.processDate() );
    }

}

출력

Before Class
Before Function
After Function
Before Function
After Function
After Class

인 주닛 5

@Before = @BeforeEach
@BeforeClass = @BeforeAll
@After = @AfterEach
@AfterClass = @AfterAll

@Before(JUnit4) ->@BeforeEach(JUnit5) - 모든 테스트 전에 방법을 호출함

@After(JUnit4) ->@AfterEach(JUnit5) - 방법은 모든 테스트 에 호출된다.

@BeforeClass(JUnit4) ->@BeforeAll(JUnit5) - 이 클래스의 모든 테스트를 실행하기 전에 정적 방법을 호출한다.서버 시작, 파일 읽기, DB 연결 작업 등 큰 작업이 될 수 있다.

@AfterClass > (JUNit4) ->@AfterAll(JUnit5) - 정적 방법은 이 클래스의 모든 테스트를 실행한 에 호출된다.

import org.junit.Assert
import org.junit.Before
import org.junit.BeforeClass
import org.junit.Test

class FeatureTest {
    companion object {
        private lateinit var heavyFeature: HeavyFeature
        @BeforeClass
        @JvmStatic
        fun beforeHeavy() {
            heavyFeature = HeavyFeature()
        }
    }

    private lateinit var feature: Feature

    @Before
    fun before() {
        feature = Feature()
    }

    @Test
    fun testCool() {
        Assert.assertTrue(heavyFeature.cool())
        Assert.assertTrue(feature.cool())
    }

    @Test
    fun testWow() {
        Assert.assertTrue(heavyFeature.wow())
        Assert.assertTrue(feature.wow())
    }
}

와 같다

import org.junit.Assert
import org.junit.Test

 class FeatureTest {
    companion object {
        private val heavyFeature = HeavyFeature()
    }

    private val feature = Feature()

    @Test
    fun testCool() {
        Assert.assertTrue(heavyFeature.cool())
        Assert.assertTrue(feature.cool())
    }

    @Test
    fun testWow() {
        Assert.assertTrue(heavyFeature.wow())
        Assert.assertTrue(feature.wow())
    }
}

이 모든 주석 간의 기본적인 차이는 다음과 같다.

  1. @BeforeEach - 각 테스트 방법 실행 전(예: setUp) 공통 코드를 실행할 때 사용한다. JUnit 4의 @Before와 유사하다.
  2. @AfterAcle - 각 테스트 방법 실행 후(예: 해체) 공통 코드를 실행할 때 사용한다. JUnit 4의 @After와 유사하다.
  3. @BeforeAll - 테스트 실행 전에 클래스당 한 번 실행할 때 사용하십시오. JUnit 4의 @BeforeClass와 유사함.
  4. @AfterAll - 모든 테스트를 실행한 후 클래스당 한 번 실행할 때 사용하십시오.JUnit 4의 @AfterClass와 유사하다.

이 모든 주석과 사용법은 Codingeek - Junit5 테스트 라이프사이클에 정의되어 있다.

@BeforeClass반면에 전체 테스트 슈트 전에 실행될 것이다.@Before각 테스트 전에 실행되는 동안@BeforeClass전체 시험 기구 전에 한 번 주행한다.만약 당신의 테스트 클래스에 10개의 테스트가 있다면,@Before 코드는 10번 지만이다.@BeforeClass한 번만 실행될 것이다.

참조URL: https://stackoverflow.com/questions/20295578/difference-between-before-beforeclass-beforeeach-and-beforeall

반응형