Junit4学习与使用

时间:2021-12-26 05:05:13

学习使用JUnit4,既然使用最新版本了,就不要再考虑老版本是如何使用的了,之前有听过JUnit但一直没有使用,现在开始学习使用JUnit4

介绍就不说了,简单的理解为“就是一个方便大家测试的插件!”

现在使用Myeclipse来实现创建Junit4(Eclipse突然挂掉了,但两者差不了多少)

既然要测试方法,首先要有方法,我使用最简单的加减乘除。

Calculator.java

package com.demo;

public class Calculator {
	private double x;
	private double y;
	public double getX() {
		return x;
	}
	public void setX(double x) {
		this.x = x;
	}
	public double getY() {
		return y;
	}
	public void setY(double y) {
		this.y = y;
	}

	public double add(double x , double y) {
		return x + y;
	}
	
	public double reduction(double x , double y) {
		return x - y;
	}
	
	public double multiply(double x , double y) {
		return x * y;
	}
	
	public double division(double x , double y) {
		return x / y;
	}
}
接下来就要为这个类创建测试类了,看仔细步骤:

第一步:右键点击Calculator.java,New--->JUnit Test case(一般情况下直接会看到,如果没有看到的话就点击Other,然后就可以找到了),如图:

Junit4学习与使用

这里说明一点,最好右键你想测试的测试类,这样的话,测试类的名称与路径工具会为你自动填充,就像下面,如图:

Junit4学习与使用

三个红框要填写准确,对了,还有上面选择JUnit版本,如果出来的界面和这不一样,都空着,那就自己填写,名字规范化“XXXTest”,下面的Class under test 点击Browse之后,要自己输入类名,路径才能出现。

第二步,点击next,选择你将要测试的方法,如图:

Junit4学习与使用

最后,点击finish,一个测试类就自动完成了。

CalculatrorTest.java

public class CalculatorTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
	}

	@Test
	public void testAdd() {
		fail("Not yet implemented");
	}

	@Test
	public void testReduction() {
		fail("Not yet implemented");
	}

	@Test
	public void testMultiply() {
		fail("Not yet implemented");
	}

	@Test
	public void testDivision() {
		fail("Not yet implemented");
	}

}
首先观察一下内部代码结构
Junit4学习与使用和@BeforeClass、@AfterClass、@Test

setUpBeforeClass()方法在整个类初始化之后调用,一般用来做测试准备工作;

tearDownAfterClass()方法在整个类结束之前调用,一般做测试的清理工作。

这里使用了注解,简单的理解为依赖反射,在测试类前标注@Test即可,我看了JUnit3中,写测试方法名必须以testxxx标识,而且需要继承TestCase等等,JUnit4大量的使用注解来解决这一现象,既方便又快捷。

下面介绍一下经常使用到的一些注解:

       @Before:初始化方法

@After:释放资源

@Test:测试方法,在这里可以测试期望异常和超过时间

@Ignore:忽略的测试方法

@BeforeClass:针对所有测试方法,只执行一次,且必须为static void

@AfterClass:针对所有测试,只执行一次,且必须为static void

@RunWith:指定测试类使用某个运行器

@Parameters:指定测试类的测试数据集合

@Rule:允许灵活添加或重新定义测试类中的每个测试方法的行为

@FixMethodOrder:指定测试方法的执行顺序

下面为测试类编写测试过程,这里还要说明一下,我当时不知道咋想的,定义的变量是double型,然后在写assertEquals的时候出现了问题,一般情况下使用这个函数assertEquals(expected, actual)“期望值和实际值”,然后就提示说这个方法被废弃,这点很纳闷,之前用的还好好的,怎么就突然被废弃了呢?后来才知道,double型的参数与函数,要使用assertEquals(expected, actual, delta)除了期望值和实际值之外还有一个“delta---差值”也就是可允许的误差范围!这一点不得不佩服编写API的人员,因为他想的太周到了,下面就用代码演示一下:

package com.demo;

import static org.junit.Assert.*;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;

public class CalculatorTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		System.out.println("开始测试");
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		System.out.println("测试结束");
	}

	@Test
	public void testAdd() {
		System.out.println("加法测试");
		Calculator test = new Calculator();
		assertEquals(10,test.add(4, 6),0);
	}

	@Test
	public void testReduction() {
		System.out.println("减法测试");
		Calculator test = new Calculator();
		assertEquals(5, test.reduction(6.9, 1.4), 0.1);
	}
	@Ignore("忽略乘法测试")
	@Test
	public void testMultiply() {
		System.out.println("乘法测试");
		fail("Not yet implemented");
	}

	@Test
	public void testDivision() {
		System.out.println("除法测试");
		Calculator test = new Calculator();
		assertEquals(3, test.division(10, 3), 0.5);
	}

}
先看下运行结果:

Junit4学习与使用
可以看看JUnit对话框中出现的四个方法,打钩的是运行成功;“/”是添加@Ignore注解的方法,也就是忽略测试的方法;每个方法后面都有运行的时间,控制台输出方法运行的顺序

@BeforeClass –> @Test –> @AfterClass

如果加上@Before和@After的话,顺序就是这样

@BeforeClass –>@Before –>@Test –> @After–> @AfterClass

再看提示的错误信息,相差0.5,也就是说误差是0.5,然而我故意写的0.05,当然报错了,这里提示的信息很详细。。。;注意代码里的除法测试,我给的参数是10和3,也就是10/3,然后给的期望值是3,无论给多少都有误差(0.3333333333...),所以我在误差里写上0.5,程序运行正确!

到这里Junit4最最简单的介绍和最最基本的使用方法交代完毕,肯定有不足的地方,希望大家给出建议和批评。随着对JUnit的使用,以后我还会继续记录JUnit的使用方法!