除了使用这些JUnit 4批注,我们为什么不只使用静态块和实例初始化器块?以下代码显示,每当静态初始化程序块运行时,就会运行@BeforeClass方法,而每当实例初始化程序块运行时,就会运行@Before方法。那么为什么我们需要它们?
public class DemoTest {
static {
System.out.println("init static");
}
{
System.out.println("init instance");
}
@BeforeClass
public static void setUpAll() {
System.out.println("beforeClass");
}
@Before
public void setUp() {
System.out.println("before");
}
@Test
public void test1() {
System.out.println("test1");
}
@Test
public void test2() {
System.out.println("test2");
}
}
最佳答案
如果您的测试用例不需要@Before
等提供的其他功能,那么您当然可以自由使用它们。
但是,由于您不能使用这些构造与@After
和@AfterClass
进行相同的操作,因此以对称,可重用性和可读性将它们包含在相同格式中是有意义的。
此外,对于诸如@Rule
和@ClassRule
带注释的字段(如果使用@Mock
或MockitoJUnit4Runner
如果使用@Autowired
以及SpringJUnitRunner
带有注释的字段),则必须确保已在JUnit中输入适当的@Before
等方法时进行初始化。如果您使用的是静态/实例初始化程序块,则没有这样的保证(实际上,没有保证)。