(60)Java基础 --单元测试

目录

一、测试的概念

二、使用Junit4.x进行单元环境

1、环境搭建

2、使用步骤

3、常见注解

三、规范的Junit测试方式

四、断言

1、为什么要使用断言

2、什么是断言(猜测)

3、常用API


一、测试的概念

先认识到测试的重要性:优秀的软件不是开发出来的,而是测试出来的。

软件测试分类:

        黑盒测试

        白盒测试

黑盒测试:测试工程师

      黑盒测试又称功能测试,主要检测每个功能是否都能正常使用。

      在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,进行测试,主要针对软件界面和软件功能进行测试。

白盒测试:开发工程师

      白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试,主要检测程序内部逻辑是否正常

      在测试中测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。按照程序内部的结构进行测试

      这一方法是把测试对象看作一个打开的盒子,测试人员清楚盒子内部的东西以及里面是如何运作的。

测试先行的思想

      在你不知道如何测试代码前,就不要写代码去完成功能--------->测试先行。

单元测试Junit就属于白盒测试

Java的单元测试:Junit

  1. junit3.x   针对于Java5之前的版本,没有注解,得按照规范来写测试。

  2. junit4.x   针对于Java5以及之后的版本,使用注解,推荐.

  3. junit5.x

二、使用Junit4.x进行单元环境

1、环境搭建

在IDAE中,导入junit的jar包

导入成功,如下图:

2、使用步骤

1、把junit4.x的测试jar,添加到该项目中来;

2、定义一个测试类(约定俗称的规则,非强制要求)

      测试类的名字: XxxTest,例如要测试MyMath类型,一般定义测试类的类名为MyMathTest

3、在MyMathTest中编写测试方法

      例如要测试MyMath中的add方法

import org.junit.Test;
public class MyMathTest {
	 @Test
	 public void testAdd() throws Exception{ 
	 }
}

注意

      方法是public修饰的,无返回的,该方法上必须贴有@Test标签。

4、鼠标放在测试方法的方法名上,右键点击Run,控制台打印测试结果。

3、常见注解

Junit4.x基于Java5开始的版本,支持注解。

常用注解:

@Test:要执行的测试方法

@Before 每次执行测试方法之前都会执行

@After 每次执行测试方法之后都会执行

@BeforeClass 在所有的Before方法之前执行,只在最初执行一次. 只能修饰静态方法

@AfterClass 在所有的After方法之后执行,只在最后执行一次. 只能修饰静态方法

执行顺序: BeforeClass->(Before->Test-After多个测试方法)-->AfterClass

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

public class MyMathTest {
	@BeforeClass
	public static void myBeforeClass(){
		System.out.println("beforeClass...");
	}
	@Before
	public void init(){
		System.out.println("init...");
	}
	@Test
	public void testAdd() throws Exception{
		System.out.println("测试add方法");
	}
	@Test
	public void testMinus(){
		System.out.println("测试minus方法");
	}
	@After
	public void myAfter(){
		System.out.println("myAfter...");
	}
	@AfterClass
	public static void myAfterClass(){
		System.out.println("afterClass...");
	}
}

执行结果

三、规范的Junit测试方式

直接生成测试类的方式

      在要测试的类的上面右键,点击Generate,然后在建及test就可以生成测试类。

如果想要测试一个类的方法,有两种方法。

第一种测试方法:不创建新的测试类,只需要在要测试的方法上面加上@Test这个注解,但是这个测试方法不能有参数。

第二种测试方法:创建一个test测试目录,在目录下面创建要测试的方法的一样包路径,然后创建一个要测试的类的测试类,测试类的名字可以是 XxxTest 这种格式(非强制要求),然后在测试类

里面可以定义测试方法了。如下代码示例:

要测试的类

public class MyMath {
	public int add(int x,int y){
		return x+y;
	}	
	public int minus(int x,int y){
		return x-y;
	}
	public int multiply(int x,int y){
		return x*y;
	}
	public int divide(int x,int y){
		return x/y;
	}
}

测试类

import org.junit.Assert;
import org.junit.Test;
public class MyMathTest {
	private MyMath math = new MyMath();
	@Test
	public void testAdd() {
		int result = math.add(1,2); //执行MyMath中的add方法获得结果
		//使用断言
		Assert.assertEquals(3, result);
	}
	@Test
	public void testMinus() {
		int result = math.minus(1,2); //执行MyMath中的minus方法获得结果
		//使用断言
		Assert.assertEquals(-1, result);
	}
	@Test
	public void testMultiply() {
		int result = math.multiply(1,2); //执行MyMath中的multiply方法获得结果
		//使用断言
		Assert.assertEquals(2, result);
	}
	@Test
	public void testDivide() {
		int result = math.divide(1,2); //执行MyMath中的divide方法获得结果
		//使用断言
		Assert.assertEquals(0, result);
	}
}

四、断言

1、为什么要使用断言

注意

      不同的公司有不同的规范和要求,大公司对于单元测试的要求较严格,按照公司的要求来就可以,我们在学习中为了直观的观察程序的执行结果还是直接使用输出语句。

2、什么是断言(猜测)

期望值(猜测值):   断言时希望是多少.

真实值(程序运行的结果):   程序内部运算之后实际是多少.

断言成功(猜对了):   期望值和真实值相同,此时显示绿条.

断言失败(猜错了):   期望值和真实值不同,此时显示红条

3、常用API

1、Assert.assertEquals(message, expected, actual):比较的值

   三个参数:

     message:  断言失败的提示信息,断言成功不会显示.

     expected: 期望值

     actual:   真实值

   若真实值和期望值想等,则断言成功.--->绿条

 

以下断言作为了解即可

2、Assert.assertSame(message, expected, actual):比较地址,是同一个对象

   Assert.assertNotSame(message, expected, actual):断言不是同一个对象

 

3、Assert.assertTrue(message, condition):断言condition应该为TRUE

Assert.assertFalse(message, condition):断言condition应该为FALSE

 

4、Assert.assertNull(message, object):断言对象object为null

Assert.assertNotNull(message, object):断言对象object不为null

 

5、@Test(expected=ArithmeticException.class)

   断言该方法报错ArithmeticException

 

6、@Test(timeout=400)

   期望该方法在400毫秒之内执行完成.

上一篇:(59)Java基础 --反射-reflect

下一篇:(61)Java基础 --Lambda表达式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值