zoukankan      html  css  js  c++  java
  • Junit4学习笔记--方法的执行顺序

    package com.lt.Demo.TestDemo;
    
    import java.util.Arrays;
    import java.util.Collection;
    
    import org.junit.After;
    import org.junit.AfterClass;
    import org.junit.Before;
    import org.junit.BeforeClass;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.junit.runners.Parameterized;
    import org.junit.runners.Parameterized.Parameters;
    
    import static org.junit.Assert.*;
    
    @RunWith(Parameterized.class)
    public class CalculatorTest {
        private int param;
        private int result;
    
        @Parameters
        public static Collection data() {
            return Arrays.asList(new Object[][] { { 2, 4 }, { 0, 0 }, { -3, 9 }, });
        }
        
        Calculator calculator = new Calculator();
    
        public CalculatorTest(int param,int result) {
            this.param = param;
            this.result = result;
            System.out.println("构造函数被调用");
        }
    
        @BeforeClass
        public static void testBeforeClass() {
            System.out.println("BeforeClass");
        }
    
        
        @Before
        public void init() throws ArithmeticException {
            System.out.println("BeforeMethod");
            calculator.clear();
        }
    
        @Test
        public void testPlusSelf()
        {
            
            calculator.PlusSelf(param);
            assertEquals(result, calculator.getResult());
            System.out.println("testPlusSelf:use data");
            
        }
        
        @Test
        public void testAdd() {
            int a = 10;
            int b = 100;
            calculator.add(a, b);
    
            int expectAnswer = 110;
            System.out.println("testAdd:not use data");
            assertEquals(expectAnswer, calculator.getResult());
        }
    
        
        @After
        public void testAfter() {
            System.out.println("AfterMethod");
        }
    
        
        @AfterClass
        public static void testAfterClass() {
            System.out.println("AfterClass");
        }
    
        
    
    }

    运行结果:

    BeforeClass
    构造函数被调用
    BeforeMethod
    testPlusSelf:use data
    AfterMethod
    构造函数被调用
    BeforeMethod
    testAdd:not use data
    AfterMethod
    构造函数被调用
    BeforeMethod
    testPlusSelf:use data
    AfterMethod
    构造函数被调用
    BeforeMethod
    testAdd:not use data
    AfterMethod
    构造函数被调用
    BeforeMethod
    AfterMethod
    构造函数被调用
    BeforeMethod
    testAdd:not use data
    AfterMethod
    AfterClass

    分析:

    @Before在每一次方法调用之前都会被执行
    @After在每一次方法调用之后都会执行
    @BeforeClass 在Test类方法执行之前会被调用
    @AfterClass 在Test类方法执行之后会被执行

    带有参数化的运行过程:假设参数化data()方法中的数组个数为n个
    1.运行@BeforeClass修饰的静态方法
    2.运行Test类的构造函数
    3.运行@Before修饰得方法
    4.运行@Test修饰的所有方法
    5.运行@After修饰的方法
    回到2步骤,重复执行n次。每次取参数化data()方法返回的一个数组值作为运行参数
    6.运行@AfterClass修饰的方法

  • 相关阅读:
    php ajax请求和返回
    关于 58 996 浪潮 奋进者计划 华为 奋斗者协议—— 小论!
    简单的行为控制管理方法,自动登录,session定时验证码过期
    mysql performance_schema 和information_schema.tables了解
    视频直播点播nginx-rtmp开发手册中文版
    PHPExcel中文开发手册翻译版(2)
    vm安装centos 老是出现 grub.conf 配置问题
    PHPExcel中文开发手册翻译版(1)
    微信支付 扫码支付 模式二 完整版和测试代码+后台对账
    PHP写在线视频直播技术详解
  • 原文地址:https://www.cnblogs.com/limingluzhu/p/3879142.html
Copyright © 2011-2022 走看看