您的位置:首页 > 其它

Junit4学习笔记--方法的执行顺序

2014-07-30 21:08 316 查看
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修饰的方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: