1. @Before和@After

同一个单元测试内的多个测试方法:

  • 测试前都需要初始化某些对象
  • 测试后可能需要清理资源fileInputStream.close()
    @Test
public void testCalcAdd2Number(){
Main calc = new Main();
int r = calc.calculate("1+2");
assertEquals(3,r);
}
@Test
public void testCalcAdd3Number(){
Main calc = new Main();
int r = calc.calculate("1+2+5");
assertEquals(8,r);
}

JUnit可以使用@Before和@After:

  • 在@Before方法中初始化测试资源
  • 在@After方法中释放测试资源
  • @Before方法初始化的对象要放在实例字段中,因为实例字段的状态不会影响下一个@Test
public class MainTest {
Main calc;//@Before方法初始化的对象放在实例字段中
@Before
public void setUp(){
calc = new Main();
}
@Test
/**
* JUnit对于每个@Test方法
* 1.实例化MainTest对象,如MainTest test = new MainTest();
* 2.执行@Before方法 test.serUp();
* 3.执行@Test方法 test.test();
* 4.执行@After方法 test.tearDown();
*/
public void testCalcAdd2Number(){
int r = calc.calculate("1+2");
assertEquals(3,r);
}
@After
public void tearDown(){
calc = null;
}
@Test
public void testCalcAdd3Number(){
Main calc = new Main();//实例字段的状态不会受上次测试的,同样也不会影响到本次测试
int r = calc.calculate("1+2+5");
assertEquals(8,r);
}
@After
public void tearDown(){
calc = null;
}
}

示例

Calculator.java

public class Calculator {
public int calculator(String expression){
String[] ss = expression.split("\\+");
int sum = 0;
for(String s:ss){
sum = sum + Integer.parseInt(s.trim());
}
return sum;
}
}

CalculatorTest.java

package com.testList;

import org.junit.After;
import org.junit.Before;
import org.junit.Test; import java.util.Calendar; import static org.junit.Assert.*; public class CalculatorTest {
Calculator calc;
@Before
public void setUp(){
calc = new Calculator();
}
@Test
public void testCalcAdd2Numbers(){
int r = calc.calculator("1+2");
assertEquals(3,r);
}
@Test
public void testCalcAdd3Numbers(){
int r = calc.calculator("1+2+5");
assertEquals(8,r);
}
@Test
public void testCalcAddLargeNumber() {
int r = calc.calculator("123+456");
assertEquals(579,r);
}
@Test
public void testCalcWithWhiteSpace(){
int r = calc.calculator("1 + 5 + 10 ");
assertEquals(16,r);
}
@After
public void tearDown(){
calc = null;
}
}


因此,使用@Before和@After可以保证:
* 单个@Test方法执行前会创建新的XxxTest示例,变量的状态不会传递给下一个@Test方法
* 单个@Test方法执行前后会执行@Before和@After方法

2.@BeforeClass和@AfterClass静态方法:

  • 1.在执行所有@Test方法前执行@BeforeClass静态方法
  • 2.执行所有测试
  • 3.在执行所有@Test方法后执行@AfterClass静态方法
  • @BeforeClass静态方法初始化的对象只能存放在静态字段中,而静态字段的状态会影响到所有@Test
public class MainTest{
static Main mainer;
@BeforeClass
public static void beforeClass(){
mainer = new Main();
}
}

JUnit执行逻辑:

  • @BeforeClass
  • @setUp @Test @tearDown
  • @setUp @Test @tearDown
  • ...
  • @AfterClass

初始化测试资源称为Fixture(设备,不能移动之物)

  • @Before:初始化测试对象,例如:input = new FileInputStream()
  • @After:销毁@Before创建的测试对象,例如:input.close()
  • @BeforeClass:初始化非常耗时的资源,例如连接数据库
  • @AfterClass:清理@BeforeClass创建的资源,例如断开数据库连接
import org.junit.*;

public class SequenceTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception{
System.out.println("setUpBeforeClass");
}
@AfterClass
public static void tearDownBeforeClass() throws Exception{
System.out.println("earDownBeforeClass");
}
@Before
public void setUp() throws Exception{
System.out.println("\tsetUp");
}
@After
public void tearDown() throws Exception{
System.out.println("\ttearDown");
}
@Test
public void test1() throws Exception{
System.out.println("\t\t方法1");
}
@Test
public void test2() throws Exception{
System.out.println("\t\t方法2");
}
@Test
public void test3() throws Exception{
System.out.println("\t\t方法3");
}
}

3.总结:

  • 理解JUnit执行测试的生命周期
  • @Before用于初始化测试对象,测试对象以实例变量存放
  • @After用于清理@Before创建的对象
  • @BeforeClass用于初始化耗时资源
  • @AfterClass用于清理@BeforeClass创建的资源

廖雪峰Java8JUnit单元测试-2使用JUnit-1使用Before和After的更多相关文章

  1. 廖雪峰Java8JUnit单元测试-1JUnit简介-1JUnit测试

    测试驱动开发(Test Driver Development) 1.使用main()方法测试的缺点: 只能有1个main()方法,不能把测试代码分离 没有打印出测试结果和期望结果,例如expected ...

  2. 廖雪峰Java8JUnit单元测试-2使用JUnit-4超时测试

    1.超时测试 可以为JUnit的单个测试设置超时: 超时设置1秒:@Test(timeout=1000),单位为毫秒 2.示例 Leibniz定理:PI/4= 1 - 1/3 + 1/5 - 1/7 ...

  3. 廖雪峰Java8JUnit单元测试-2使用JUnit-2异常测试

    1.异常测试 对可能抛出的异常进行测试: 异常本身是方法签名的一部分: * public static int parseInt(String s) throws NumberFormatExcept ...

  4. 廖雪峰Java8JUnit单元测试-2使用JUnit-3参数化测试

    参数化测试: 可以把测试数据组织起来 用不同的测试数据调用相同的测试方法

  5. 廖雪峰Python电子书总结

    函数 1.注意:函数的默认参数必须指向不可变对象 未修改前: def add_end(L=[]): L.append('END') return L 存在的问题:如果连续调用多次,会出现多个 'END ...

  6. 廖雪峰python教程的第一个疑问

    函数的参数一节中提到: def add_end(L = []); L.append('END') return L 正常调用add_end时(也就是有参数传入时): >>> add_ ...

  7. 爬虫:把廖雪峰的教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...

  8. Python自学笔记-生成器(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 生成器 通过列 ...

  9. Python自学笔记-lambda函数(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 匿名函数 通过 ...

随机推荐

  1. Java中8种常见的排序方法

    排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少 ...

  2. Eureka的初识

    在bili看完spring cloud eureka高可用注册中心的视频以后总结: 正常开发中,肯定有一个功能聚集服务中心,将功能方法全部写入其中,也就是一个springboot项目.该服务配置如下: ...

  3. 使用axios获取本地json数据

    1. 通过搜索 网上说不放在static文件夹中会报错  但是一直报错  放到根目录下的时候不报错了 2. 在main.js中引入axios import axios from 'axios' 3. ...

  4. 浅谈java中的String、StringBuffer、StringBuilder类的区别以及关系

    在java中最常见的使用就是对字符串的操作:首先先说一下对字符串的理解:字符串就是一连串字符序列,Java提供了String和StringBuffer两个类来封装字符串,并提供一系列方法来操作字符串对 ...

  5. Javascript 严格模式(strict mode)详解

    Javascript 严格模式详解   一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Ja ...

  6. php7-编译安装参数

    ./configure \--with-fpm-user=www \--with-fpm-group=www \--prefix=/usr/local/php7 \--with-config-file ...

  7. Vue常见问题解决办法(一)ESLint检查报错

    vue.js报错“Do not use 'new' for side effects“(main.js里)解决办法 ESLint工具检查代码质量,main.js里的原代码是这样的: new Vue({ ...

  8. css详细笔记

    CSS中的块级元素与行内元素 块级元素特性: 1.占据一整行,总是重起一行并且后面的元素也必须另起一行显示. 2.内联元素特性: 3.和其他内联元素显示在同一行. 块级元素列举如下: div(文档分区 ...

  9. TensorFlow,Keras限制GPU显存

    运行TensorFlow程序会占用过多的显卡比例,多人共同使用GPU的时候,会造成后面的人无法运行程序. 一.TensorFlow 1.预加载比例限制 tf_config = tensorflow.C ...

  10. 如何使用油猴脚本不要vip就能观看各大视频网站如腾讯,爱奇艺等的vip视频

    如何使用油猴脚本不要vip就能观看各大视频网站如腾讯,爱奇艺等的vip视频 首先打开谷歌商店(这里需要fq,如不能fq的小伙伴请看上面写的Chrome怎么访问外网) 搜索Tampermonkey,点击 ...