`

JUnit4中@AfterClass @BeforeClass @after @before的区别对比

阅读更多

一.基础知识

JUnit4使用Java5中的注解(annotation),以下是JUnit4常用的几个annotation:
@Before:初始化方法   对于每一个测试方法都要执行一次(注意与BeforeClass区别,后者是对于所有方法执行一次)
@After:释放资源  对于每一个测试方法都要执行一次(注意与AfterClass区别,后者是对于所有方法执行一次)
@Test:测试方法,在这里可以测试期望异常和超时时间
@Test(expected=ArithmeticException.class)检查被测方法是否抛出ArithmeticException异常
@Ignore:忽略的测试方法
@BeforeClass:针对所有测试,只执行一次,且必须为static void
@AfterClass:针对所有测试,只执行一次,且必须为static void
一个JUnit4的单元测试用例执行顺序为:
@BeforeClass -> @Before -> @Test -> @After -> @AfterClass;
每一个测试方法的调用顺序为:
@Before -> @Test -> @After;

 

二.实例

package com.bijian.study;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;

public class JUnit4Test {
    
    @Before
    public void before() {
        System.out.println("@Before");
    }

    @Test
    /**   
     *Mark your test cases with @Test annotations.    
     *You don’t need to prefix your test cases with “test”.   
     *tested class does not need to extend from “TestCase” class.   
     */
    public void test() {
        System.out.println("@Test");
        Assert.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)");
        Assert.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(timeout = 50)
@After
@Before
@Test(expected = Exception.class)
@After
@Before
@Test
@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 的方法抛出异常的的情况下也一样会。

        特别说明:

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

        2.如果类里面可以有多个注解过@Before和@After的方法,它们的执行顺序是未知的;

        3.@BeforeClass  @AfterClass注解是junit提供的另外的两个注解,必须设置在public 静态方法之上,表示在class加载之前执行,这样设置的方法只会执行一次,而@Before @After则会再每次test之前/之后执行;

        4.在JUnit4中,如果测试类继承了TestCase类,那么所有的Annotation都不会起作用。

分享到:
评论

相关推荐

    junit-4.13.2的压缩包,JUnit是Java编程语言的单元测试框架,用于编写和可重复运行的自动化测试

    @BeforeClass @Before @After @AfterClass这些注解标注的方法又称测试的Fixture。 JUnit为所有原语类型、对象和数组(原语或对象)提供重载断言方法。参数顺序为预期值后接实际值。或者,第一个参数可以是失败时输出...

    myjunit.rar

    自定义实现基于注解的junit框架. 实现以下注解: @After @Before @AfterClass @BeforeClass @Test 实现junit 的对注解解析功能,并参照junit的异常处理.

    Junit中的基本注解(教学视频)

    @BeforeClass – 表示在类中的任意public static void方法执行之前执行 @AfterClass – 表示在类中的任意public static void方法执行之后执行 @Before – 表示在任意使用@Test注解标注的public void方法执行之前...

    junit4.9.jar 最新版本

    当一个测试方法还没有具备测试条件时可以先标志为忽略的测试方法 @BeforeClass:在所有测试方法执行前执行,只执行一次 ,且必须为static void,一般用于初始化一些共享的实例或加载共享的资源 @AfterClass:在所有...

    MyBatis 需要注意的地方junit注解

    @BeforeClass---@Before---@Test---@After---@Before ---@Test---@After---@AfterClass junit与main方法相比的优势:代码量少、结构清晰、灵活性更好 main:一个类中只能有一个main方0法 层次结构方面不够清晰 运行...

    junit4.9.jar最新版本

    @BeforeClass:在所有测试方法执行前执行,只执行一次 ,且必须为static void,一般用于初始化一些共享的实例或加载共享的资源 @AfterClass:在所有测试方法执行后执行,只执行一次,且必须为static void,一般用于...

    junit 4.12 jar包

    用于写java测试单元的必须的jar包,junit4.12jar包,java导入jar即可引用标签, 注解,方法名为test开头 ...@BeforeClass  @AfterClass  每次都运行 void @Before @After 测试 void @Test

    Junit4Demo:Junit4 演示

    junit4 使用总结 @Test @Test(timeout=毫秒),@Test(expected=异常类) @Ignore ...@BeforeCalss @AfterClass @Before @After 测试套件@RunWith(Suite.class) 参数化设置@RunWith(Parameterized.class)

    Java-Junit-Mockito

    Green Bar和assertEquals步骤04:重构您的第一个JUnit测试步骤05:第二个JUnit示例assertTrue和assertFalse步骤06:@Before @After步骤07:@BeforeClass @AfterClass步骤08:比较JUnit测试中的数组步骤09:测试...

    junit的jar包

    Files contained in junit4-4.8.2.jar: LICENSE.txt META-INF/MANIFEST.MF junit.extensions.ActiveTestSuite.class junit.extensions.RepeatedTest.class junit.extensions.TestDecorator.class junit.extensions...

    28minutes_MockitoTutorialForBeginners

    Mockito教程:通过25个Junit...@BeforeClass @AfterClass批注 Junit中有一些方法 @测试 失败 断言 assertEquals(预期,结果) 步骤4 JUnit简单测试方案 比较数组 测试异常 性能单元测试 有些事情我们可能会改变。 测试

    Java单元测试之JUnit篇

    @BeforeClass全局只会执行一次,而且是第一个运行@Before在测试方法运行之前运行@Test测试方法@After在测试方法运行之后允许@AfterClass全局只会执行一次,而且是最后一个运行@Ignore忽略此方法新建一个项目叫JUnit...

    春天引导军

    测试包括:测试用例:@Test批注@ BeforeClass,@ Before,@ After,@ AfterClass,用于测试其行为 注意:项目结构 项目-src:部署到生产-包名称,例如com.junit.class-类名,例如MyClass-测试:不部署到生产-包名称...

    阿里巴巴,天猫,支付宝面试题

    1. junit用法,before,beforeClass,after, afterClass的执行顺序 2. 分布式锁 3. nginx的请求转发算法,如何配置根据权重转发 4. 用hashmap实现redis有什么问题(死锁,死循环,可用ConcurrentHashmap) 5. 线程的...

Global site tag (gtag.js) - Google Analytics