除了使用这些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带注释的字段(如果使用@MockMockitoJUnit4Runner如果使用@Autowired以及SpringJUnitRunner带有注释的字段),则必须确保已在JUnit中输入适当的@Before等方法时进行初始化。如果您使用的是静态/实例初始化程序块,则没有这样的保证(实际上,没有保证)。

10-07 19:28
查看更多