Junit总结

什么是Junit

JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

Junit官网

官网地址

 

使用步骤 

1、创建一个Java project项目,取名为Junit

2、创建Junit类,定义四个方法,即加减乘除。

public class Junit {

	public int add(int a, int b) {
        return a+b;
    }

    public int subtraction(int a ,int b) {
        return a-b;
    }

    public int division(int a,int b) {
        return a/b;
    }

    public int multiplication(int a,int b) {
        return a*b;
    }
}

3、导入jar包

从官网上下载jar包,之后导入eclipse中,右键点击jar----> build path----->Add to Build Path即可。

或者右键点击项目名------>Build Path----->Add Libraries(不用下载那些jar包,因为eclipse内部集成了,我们只需要引入即可)

 

选择Junit,点击next

 

选择Junit5,点击finish 

4、测试

①不用Junit

public class JunitTest {

	public static void main(String[] args) {
		Junit junit = new Junit();
		//测试 add()方法
		int result = junit.add(1, 2);
		if(result==3) {
			System.out.println("add()方法正确");
		}
		
		//测试 subtraction()方法
		int result2 = junit.subtraction(2, 1);
		if(result2==1) {
			System.out.println("subtraction()方法正确");
		}
		
		//测试 multiplication()方法
		int result3 = junit.multiplication(2, 3);
		if(result3==6) {
			System.out.println("multiplication()方法正确");
		}
		
		//测试 division()方法
		int result4 = junit.division(6, 2);
		if(result4==3) {
			System.out.println("division()方法正确");
		}
	}
}

 那么我们可以看到,不用 Junit 只能写在 main()方法中,通过运行结果来判断测试结果是否正确。这里需要测试的有四个方法,如果有很多方法,那么测试代码就会变得很混乱。

②使用Junit方法

import org.junit.Assert;
import org.junit.Test;

public class JunitTest {

	@Test
	public void testAdd() {
		Junit junit = new Junit();
		Assert.assertEquals(3, junit.add(1, 2));
	}
	
	@Test
	public void testSubtraction() {
		Junit junit = new Junit();
		Assert.assertEquals(1, junit.subtraction(2, 1));
	}
	
	@Test
	public void testDivision() {
		Junit junit = new Junit();
		Assert.assertEquals(2, junit.division(6, 3));
	}
	
	@Test
	public void testMultiplication() {
		Junit junit = new Junit();
		Assert.assertEquals(6, junit.multiplication(2, 3));
	}
}

运行结果如图所示

 

错误案例

当绿条变成红色的时候,代表测试对象有误,其中包括两种错误,一个是Failure,另一个是Error。Failure的出现代表程序运行的实际值和预期值不符,而Error的出现代表代码本身有误或者有隐藏的bug。

在这里将testAdd方法里面的结果改为4

结果如图

 

注解

注解与注释不同,注释是由“//”等开头,而注解是“@”开头。两者的区别是注解不会对程序本身有任何影响,其作用仅仅是方便我们更好的理解代码。而注解是对程序本身又影响的,它相当于是一个可执行的代码。 
JUnit常用注解及其作用有:

注解名作用
@Before初始化方法
@After释放资源
@Test测试方法,在这里可以测试期望异常和超时时间
@Ignore忽略的测试方法
@BeforeClass针对所有测试,只执行一次,且必须为static void
@AfterClass针对所有测试,只执行一次,且必须为static void
@RunWith指定测试类使用某个运行器
@Parameters指定测试类的测试数据集合
@Rule允许灵活添加或重新定义测试类中的每个测试方法的行为
@FixMethodOrder指定测试方法的执行顺序

让我们来测试一把吧

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

public class JunitTest {

	 public JunitTest() {
	        System.out.println("构造函数");
	    }
	 
	    @BeforeClass
	    public static void beforeClass(){
	        System.out.println("@BeforeClass");
	    }
	     
	    @Before
	    public void befor(){
	        System.out.println("@Before");
	    }
	     
	    @Test
	    public void test(){
	        System.out.println("@Test");
	    }
	     
	    @Ignore
	    public void ignore(){
	        System.out.println("@Ignore");
	    }
	     
	    @After
	    public void after(){
	        System.out.println("@After");
	    }
	     
	    @AfterClass
	    public static void afterClass(){
	        System.out.println("@AfterClass");
	    }
}

 测试结果如图:

从上述测试可知:
1. 被@BeforeClass注解修饰的方法第一个执行 
2. 被@Before注解修饰的方法会在每个@Test方法执行前执行一次 
3. 被@After注解修饰的方法会在每个@Test方法执行后执行一次 
4. 被@AfterClass注解修饰的方法最后一个执行 
利用以上特性我们可以有效的实现初始化以及结尾清除功能
 

进阶使用

@Test有两个可控的参数,分别为timeout和expected

public class JunitTest {

    @Test(timeout=1)
    public void test() {
        while(true) {
            System.out.println("running.....");
        }
    }

    @Test(expected=ArithmeticException.class)
    public void test2() {
        Assert.assertEquals(3, new Junit().division(6, 0));
    }
}

test()方法中写入的是一个死循环,按照常理来说应该是死循环直到内存溢出,现在我们对test()进行测试,控制台的结果是 

 

可以看到,程序自动停止了。这就是timeout参数的作用,规定程序在n毫秒之内结束,如果测试代码没有在n毫秒内结束,在第n毫秒时会强制停止。test()上的timeout规定在了1毫秒,所以死循环也就只执行了1毫秒。

test2()函数中写入的是一个断言,判断6/0是否等于3,按照之前的测试来看,测试应该是报Error,因为除数不能为0,但我们加上expected之后,程序测试结果如下

绿条表示测试成功。 
expected参数的含义是指期望抛出什么异常(也就是说加上这个参数后,测试的目的就变成了看它是否会抛出指定异常,如果抛出了就是绿条,没抛出指定异常就变红条)

 

最后

 

注意:编写测试类的原则: 

    ①测试方法上必须使用@Test进行修饰

         ②测试方法必须使用public void 进行修饰,不能带任何的参数

         ③新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开

         ④测试类所在的包名应该和被测试类所在的包名保持一致

         ⑤测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖

         ⑥测试类使用Test作为类名的后缀(不是必须)

         ⑦测试方法使用test作为方法名的前缀(不是必须)

 

原文链接:https://blog.csdn.net/yu514950381/article/details/79773914

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值