Junit入门到掌握-6-JUnit基础-注解Before和After

这篇开始学注解,我们只是挑选常见和常用的注解来学习。本篇来掌握Before和After两个注解的基本使用方法。Before可以理解为事先,After理解为事后,而@Test标注的测试方法就是这件事情。

 

1. Before 和After和Test方法关系

当前@Befre 和@After注解都是测试方法层的,作用的范围是@Test标注的方法。

 

2.再添加一个用例

添加一个用例,初始化上来就做removeProein()方法,这个事后total=-5, 执行后面if判断,total又被设置等于0.

package test;
import static org.junit.Assert.*;

import org.junit.Test;

import com.anthony.protein.TrackingService;

public class TrackingServiceTests {

	@Test
	public void newTrackingServiceTotalIsZero() {
		TrackingService ts = new TrackingService();
		assertEquals("Tracking service total was not zero", 1, ts.getTotal());
	}
	
	@Test
	public void whenAddingProteinTotalIsIncreaseByAmount() {
		TrackingService ts = new TrackingService();
		ts.addProtein(10);
		assertEquals(10, ts.getTotal());
	}
	
	@Test
	public void whenRemovingProteinTotalRemainsZero() {
		TrackingService ts = new TrackingService();
		ts.removeProtein(5);
		assertEquals(0, ts.getTotal());
	}

}

上面单个用例都测试通过。

 

3. 代码优化

上面每个用例下我们一上来都要进行new TrackingService对象,所以,我们先来优化,重构下代码,把重复代码提取出来。

package test;
import static org.junit.Assert.*;

import org.junit.Test;

import com.anthony.protein.TrackingService;

public class TrackingServiceTests {
	private TrackingService ts = new TrackingService();

	@Test
	public void newTrackingServiceTotalIsZero() {
		assertEquals("Tracking service total was not zero", 0, ts.getTotal());
	}
	
	@Test
	public void whenAddingProteinTotalIsIncreaseByAmount() {
		ts.addProtein(10);
		assertEquals(10, ts.getTotal());
	}
	
	@Test
	public void whenRemovingProteinTotalRemainsZero() {
		ts.removeProtein(5);
		assertEquals(0, ts.getTotal());
	}

}

重复代码是提取出来了,但是执行上面第一个用例,有可能会报错,因为TrackingService不是一个新的new出来对象,他的total是有值,但是我们暂时没有办法取控制让这个第一个执行顺序。这个时候,我们需要借助@Before注解,把new对象这个代码放在一个方法中,一般这个和@Before匹配的方法是setup(), 我们可以这样去组织代码。

package test;
import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

import com.anthony.protein.TrackingService;

public class TrackingServiceTests {
	private TrackingService ts;
	
	@Before
	public void setup() {
                System.out.println("Before Method");
		ts = new TrackingService();
	}
	
	@Test
	public void newTrackingServiceTotalIsZero() {
		assertEquals("Tracking service total was not zero", 0, ts.getTotal());
	}
	
	@Test
	public void whenAddingProteinTotalIsIncreaseByAmount() {
		ts.addProtein(10);
		assertEquals(10, ts.getTotal());
	}
	
	@Test
	public void whenRemovingProteinTotalRemainsZero() {
		ts.removeProtein(5);
		assertEquals(0, ts.getTotal());
	}

}

再次强调下,@Before标注过的方法是针对这个类文件中所有的@Test标注过的测试方法,每一个@Test方法执行前都需要去执行一遍@Before标注的setup()方法。

 

5.使用@After

有了@Before的理解,@After就简单了,一般用于释放资源操作,例如回滚数据库等。

package test;
import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.anthony.protein.TrackingService;

public class TrackingServiceTests {
	private TrackingService ts;
	
	@Before
	public void setup() {
		System.out.println("Before Method");
		ts = new TrackingService();
	}
	
	@After
	public void tearDown() {
		System.out.println("After Method");
	}
	
	@Test
	public void newTrackingServiceTotalIsZero() {
		assertEquals("Tracking service total was not zero", 0, ts.getTotal());
	}
	
	@Test
	public void whenAddingProteinTotalIsIncreaseByAmount() {
		ts.addProtein(10);
		assertEquals(10, ts.getTotal());
	}
	
	@Test
	public void whenRemovingProteinTotalRemainsZero() {
		ts.removeProtein(5);
		assertEquals(0, ts.getTotal());
	}

}

运行输出

Before Method
After Method
Before Method
After Method
Before Method
After Method

三个用例方法,都执行过一遍Before和After方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值