@Before, @BeforeClass, @BeforeAll과 @BeforeAll 사이의 차이
사이의 주된 차이점은 무엇인가?
@Before
그리고@BeforeClass
- 그리고 JUnit 5에서
@BeforeEach
그리고@BeforeAll
- 그리고 JUnit 5에서
@After
그리고@AfterClass
JUnit Api에 따르면 @Before
다음과 같은 경우에 사용된다.
테스트를 작성할 때, 여러 테스트가 실행되기 전에 유사한 개체를 생성해야 한다는 것을 발견하는 것이 일반적이다.
반면에@BeforeClass
데이터베이스 연결을 설정하는 데 사용할 수 있다.그러나 할 수 없었다.@Before
같은 일을 하십니까?
표시된 코드@Before
동안 각 테스트 전에 실행된다.@BeforeClass
전체 시험 기구 전에 한 번 주행한다.만약 당신의 테스트 클래스에 10개의 테스트가 있다면,@Before
코드는 10번 실행되지만@BeforeClass
한 번만 실행될 것이다.
일반적으로, 당신은@BeforeClass
여러 테스트에서 동일한 계산적으로 비싼 설정 코드를 공유해야 하는 경우.데이터베이스 연결 설정은 이 범주에 속한다.다음에서 코드를 이동할 수 있는 위치@BeforeClass
로@Before
그러나 당신의 테스트 실행은 더 오래 걸릴 수 있다.코드가 표시됨을 참고하십시오.@BeforeClass
정적 이니셜라이저로 실행되므로 테스트 고정장치의 클래스 인스턴스가 생성되기 전에 실행된다.
JUnit 5에서 태그는@BeforeEach
그리고@BeforeAll
의 등가물.@Before
그리고@BeforeClass
JUnit 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())
}
}
이 모든 주석 간의 기본적인 차이는 다음과 같다.
- @BeforeEach - 각 테스트 방법 실행 전(예: setUp) 공통 코드를 실행할 때 사용한다. JUnit 4의 @Before와 유사하다.
- @AfterAcle - 각 테스트 방법 실행 후(예: 해체) 공통 코드를 실행할 때 사용한다. JUnit 4의 @After와 유사하다.
- @BeforeAll - 테스트 실행 전에 클래스당 한 번 실행할 때 사용하십시오. JUnit 4의 @BeforeClass와 유사함.
- @AfterAll - 모든 테스트를 실행한 후 클래스당 한 번 실행할 때 사용하십시오.JUnit 4의 @AfterClass와 유사하다.
이 모든 주석과 사용법은 Codingeek - Junit5 테스트 라이프사이클에 정의되어 있다.
@BeforeClass
반면에 전체 테스트 슈트 전에 실행될 것이다.@Before
각 테스트 전에 실행되는 동안@BeforeClass
전체 시험 기구 전에 한 번 주행한다.만약 당신의 테스트 클래스에 10개의 테스트가 있다면,@Before
코드는 10번 지만이다.@BeforeClass
한 번만 실행될 것이다.
'IT이야기' 카테고리의 다른 글
새 Vue 앱 버전을 릴리스할 때 크롬에서 캐시를 강제로 지우는 방법 (0) | 2022.05.15 |
---|---|
Java 바이트 배열에서 문자열로 바이트 배열 (0) | 2022.05.15 |
Vue.js - v-model에서 매개 변수를 전달하여 중첩된 속성 변경 (0) | 2022.05.15 |
Vue Watch가 트리거하지 않음 (0) | 2022.05.15 |
어레이 항목을 이동할 때 v-for와 함께 렌더링되는 구성 요소 내부에 포함된 Youtube 비디오 다시 로드 (0) | 2022.05.15 |