@ Before,@ BeforeClass,@ BeforeEach和@BeforeAll之间的区别两者之间的主要区别是什么@Before 和 @BeforeClass在JUnit 5 @BeforeEach和@BeforeAll@After 和 @AfterClass根据JUnit Api @Before用于以下情况:编写测试时,通常会发现多个测试需要在运行之前创建类似的对象。而@BeforeClass可用于建立数据库连接。但不能@Before做同样的事情?
3 回答
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
标记的代码@Before
在每次测试之前执行,而@BeforeClass
在整个测试夹具之前运行一次。如果您的测试类有十个测试,@Before
代码将执行十次,但@BeforeClass
只执行一次。
通常,@BeforeClass
当多个测试需要共享相同的计算昂贵的设置代码时,您使用。建立数据库连接属于此类别。您可以将代码@BeforeClass
移入@Before
,但您的测试运行可能需要更长时间。请注意,标记的代码@BeforeClass
作为静态初始化程序运行,因此它将在创建测试夹具的类实例之前运行。
在JUnit的5,标签@BeforeEach
和@BeforeAll
是等价@Before
和@BeforeClass
JUnit 4中他们的名字是多一点表明它们在运行时的,松散的解释:“以前每次测试”和“一旦所有测试之前”。
万千封印
TA贡献1891条经验 获得超3个赞
JUnit中的BeforeClass和BeforeClass
函数@Before
注释将在具有@Test
注释的类中的每个测试函数之前执行,但函数@BeforeClass
将仅在类中的所有测试函数之前执行一次。
类似地,@After
具有@Test
注释的函数@AfterClass
将在具有注释的类中的每个测试函数之后执行,但是函数将仅在类中的所有测试函数之后执行一次。
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 ClassBefore FunctionAfter FunctionBefore FunctionAfter FunctionAfter Class
在Junit 5
@Before = @BeforeEach@BeforeClass = @BeforeAll@After = @AfterEach@AfterClass = @AfterAll
添加回答
举报
0/150
提交
取消