주요 차이점은 무엇입니까
@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
Junit 5에서
@Before = @BeforeEach
@BeforeClass = @BeforeAll
@After = @AfterEach
@AfterClass = @AfterAll
답변
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())
}
}