回答:
マーク@Before
されたコードは、各テストの前に実行されます@BeforeClass
が、テストフィクスチャ全体の前に1回実行されます。テストクラスに10個のテストがある場合、@Before
コードは10回実行されますが、1回@BeforeClass
だけ実行されます。
一般に、@BeforeClass
複数のテストで計算コストの高いセットアップコードを共有する必要がある場合に使用します。データベース接続の確立はこのカテゴリに分類されます。コードをから@BeforeClass
に移動でき@Before
ますが、テストの実行に時間がかかる場合があります。マークされたコード@BeforeClass
は静的初期化子として実行されるため、テストフィクスチャのクラスインスタンスが作成される前に実行されることに注意してください。
ではJUnitの5、タグ@BeforeEach
と@BeforeAll
の等価物である@Before
と@BeforeClass
彼らの名前が緩く解釈し、それが実行したときの、もう少し指標であるJUnitの中に4:「各テストの前に」と「すべてのテストの前に一度」。
@BeforeClas
は静的です。テストクラスインスタンスが作成される前に実行されます。
@BeforeAll
静的でない可能性があることを追加し、新しいテストインスタンスを実行するたびに呼び出します。対応する回答を見るstackoverflow.com/a/55720750/1477873
各注釈の違いは次のとおりです。
+-------------------------------------------------------------------------------------------------------+
¦ 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およびBeforeClass
関数@Before
アノテーションは、アノテーションを持つクラスの各テスト関数の前に実行されます@Test
が、関数with @BeforeClass
は、クラスのすべてのテスト関数の前に1回だけ実行されます。
同様に、@After
アノテーション付きの関数は、@Test
アノテーションが付けられたクラスの各テスト関数の後に実行されますが、クラス内の@AfterClass
すべてのテスト関数の後に1回だけ実行されます。
SampleClass
public class SampleClass {
public String initializeData(){
return "Initialize";
}
public String processDate(){
return "Process";
}
}
SampleTest
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())
}
}