JUnit 4 使用 Java 5 中的注解(annotation),以下是JUnit 4 常用的几个 annotation 介绍...

本文详细解析JUnit4中的注解如@BeforeClass、@AfterClass、@Before、@After、@Test、@Ignore、@Timeout和@Expected等,并通过示例展示了它们在单元测试中的应用顺序和特性。

 

JUnit 4 中的Before After Ignore Test BeforeClass AfterClass


@BeforeClass:针对所有测试,只执行一次,且必须为static void

@Before:初始化方法

@Test:测试方法,在这里可以测试期望异常和超时时间

@Ignore:忽略的测试方法

@After:释放资源

@AfterClass:针对所有测试,只执行一次,且必须为static void

 

一个JUnit 4 的单元测试用例执行顺序为:

@BeforeClass –> @Before –> @Test –> @After –> @AfterClass

每一个测试方法的调用顺序为:

@Before –> @Test –> @After

写个例子测试一下,测试一下

package junit4;

import org.junit.*;

import static org.junit.Assert.*;

 

public class JUnit4Test {

    @Before

    public void before() {

        System.out.println("@Before");

    }

     @Test

    public void test() {

        System.out.println("@Test");

        assertEquals(5 + 5, 10);

    }

     @Ignore

    @Test

    public void testIgnore() {

        System.out.println("@Ignore");

    }

     @Test(timeout = 50)

    public void testTimeout() {

        System.out.println("@Test(timeout = 50)");

        assertEquals(5 + 5, 10);

    }

     @Test(expected = ArithmeticException.class)

    public void testExpected() {

        System.out.println("@Test(expected = Exception.class)");

        throw new ArithmeticException();

    }

     @After

    public void after() {

        System.out.println("@After");

    }

     @BeforeClass

    public static void beforeClass() {

        System.out.println("@BeforeClass");

    }

     @AfterClass

    public static void afterClass() {

        System.out.println("@AfterClass");

    }

}

 

输出结果

 

>@BeforeClass
@Before
@Test
@After
Test 'net.im47.demo.junit.JUnit4Test.testIgnore' ignored
@Before
@Test(50)
@After
@Before
@Test(Exception.class)
@After
@AfterClass

 


对比:

@BeforeClass  @AfterClass 对于那些比较昂贵的资源的分配或者释放来说是很有效的,因为他们只会在类中被执行一次。相比之下对于那些需要在每次运行之前都要初始化或者在运行之后都需要被清理的资源来说使用@Before@After同样是一个比较明智的选择。

@BeforeClass and @AfterClass

@Before and @After

在一个类中只可以出现一次

在一个类中可以出现多次,即可以在多个方法的声明前加上这两个Annotaion标签,执行顺序不确定

方法名不做限制

方法名不做限制

在类中只运行一次

在每个测试方法之前或者之后都会运行一次

@BeforeClass父类中标识了该Annotation的方法将会先于当前类中标识了该Annotation的方法执行。
@AfterClass
父类中标识了该Annotation的方法将会在当前类中标识了该Annotation的方法之后执行

@Before父类中标识了该Annotation的方法将会先于当前类中标识了该Annotation的方法执行。
@After
父类中标识了该Annotation的方法将会在当前类中标识了该Annotation的方法之后执行

必须声明为public static

必须声明为public 并且非static

所有标识为@AfterClass的方法都一定会被执行,即使在标识为@BeforeClass的方法抛出异常的的情况下也一样会。

所有标识为@After 的方法都一定会被执行,即使在标识为 @Before 或者 @Test 的方法抛出异常的的情况下也一样会。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值