单元测试笔记一:JUnit的简单使用

1.什么是单元测试?单元测试有什么优点?人们对单元测试有什么误解?

含义:单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。单元就是人为规定的最小的被测功能模块。

优点:做好了单元测试,可以提高产品的质量,减少之后的测试成本和维护成本。

误解:很多人都觉得做单元测试很麻烦(很多公司都没有单元测试这一阶段),就想着早点开发完代码早点让测试人员测试完工,但是往往这种会使一个项目的进程延迟再延迟,因为bug一个接着一个。
单元测试就好比把一个机器的零件拆分,然后逐个清洗完再组装;那些整体系统测试就好比直接清洗整台机器,但是死角残留物肯定不可避免会疏忽掉,其中谁完成的更全面显而易见。

2.什么是JUnit?

JUnit是Java所用的单元测试工具,它不是一个编辑代码的开发软件,而是一个测试代码的测试框架。

3.JUnit的简单使用

Eclipse自带有JUnit的jar包,也可以自行下载,下载地址:http://www.mvnrepository.com/
如下图所示:
在这里插入图片描述
验证通过之后进入到主页:
在这里插入图片描述
搜索“hamcrest”就可以找到相应jar包下载了:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200908185548208.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMDk2Nzg2,size_16,color_FFFFFF,t_70#pic_center
在这里插入图片描述
在这里插入图片描述
不仅要下载这个包,还需要下载JUnit的l两个通用包(原因在下文中会解释):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样jar包就准备好了。
下面来说明原因:
JUnit.jar:是单元测试必不可少的包,看其名称就知道它的重要性;
hamcrest-library.jar和hamcrest-core.jar是hamcrest中的jar包。Hamcrest是一个书写匹配器对象时允许直接定义匹配规则的框架,能够结合单元测试框架JUnit方便测试。它携带了一个匹配库,里面有很多方法和类方便我们进行测试调用,包含了很多断言(Assert)的用法。
什么是断言?
断言就是一种判断,也就是说我们相信这个结果是真的,如果断言不为真,则说明我们的测试会出现错误。

下面利用eclipse来简单介绍JUnit的使用,以及是如何与hamcrest相结合的

#如果是用eclipse自带JUnit的jar包
①新建一个Java项目,点击“File-New-Java Project”
在这里插入图片描述
在这里插入图片描述
②专门建两个package包,一个放测试类,一个放被测试的类。右击“New-Package”
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
③建立要被测试的类T,并写上要被测试的方法
在这里插入图片描述
在这里插入图片描述

// 要被测试的方法
public class T {
    
    

	public int add(int x,int y){
    
    
		return x + y;
	}
	
	public int divide(int x,int y){
    
    
		return x / y;
	}
	
	public static void main(String[] args) {
    
    
		int z = new T().add(3, 5);
		System.out.println(z);
	}
}

④建立测试类TTest用来测试上一步写的代码:右击“New-JUnit Test Case”
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
之后会自动生成含有@Test的测试方法
在这里插入图片描述
⑤编写测试类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// 上图代码
public class TTest {
    
    

	@BeforeClass
	public static void beforeClass(){
    
    //没有实例化的类想要调用,就只有加个static变成静态类
		System.out.println("beforeClass");
	}
	
	@AfterClass
	public static void afterClass(){
    
    
		System.out.println("afterClass");
	}
	
	@Before
	public void before(){
    
    
		System.out.println("before");
	}
	
	@Test
	public void testAdd() {
    
    
		int z = new T().add(5, 4);
		assertEquals(9, z);//z是不是等于9
		assertTrue(z>3);//z是不是大于3
		assertTrue("z is too big", z<10);//z小于10吗?如果不小于则输出左边的值
		assertThat(z, is(9));//z是否是9
		assertThat(z, allOf(greaterThan(5),lessThan(20)));//z是否比5大,比20小
		/*
		 *  1.assertThat(d,closeTo(3.0,0.3));//d这个数值是不是在这个范围内
		 *  2.assertThat(d,greaterThanOrEqualsTo(5.0));//d这个数值是不是大于或者等于5.0
		 *  3.assertThat(map,hasEntry("asdf","asdf"));//map中有没有前者asdf对应的后者asdf
		 *  4.assertThat(iterable,hasItem("asdf"));//iterable中包不包含asdf对象
		 *  
		 *  
		 *  
		 *  failure和error的区别
		 *  failure是指测试失败;error是指测试程序本身出错
		 *  
		 *  @Before执行每一个测试方法之前(有几个方法就执行几次)
		 *  @After执行每一个测试方法之后(有几个方法就执行几次)
		 *  
		 *  当我们需要在测试之前取得很耗费时间的资源和环境时,用@BeforeClass,@AfterClass
		 *  @BeforeClass在所有的测试方法运行之前运行该方法
		 *  @AfterClass在所有的测试方法运行之后运行该方法
		 * */
	}


	@Test(expected=java.lang.ArithmeticException.class)
	public void testDivide(){
    
    
		int z = new T().divide(8, 0);
	
	}

	@After
	public void after(){
    
    
		System.out.println("after");
	}
}

如果代码复制进去报错了,就检查是不是jar包少了

⑥运行测试代码。右击“com.ycz.junit4.test-Run As-JUnit Test”,如果进度条为绿色,则表示测试通过,红色可能是Error或者Failures。【这两者如何区分上述代码有说明】
在这里插入图片描述

#如果是自行下载jar包(上文已说明如何下载)
右击项目名Test"Build Path-Add External Archives",选择jar包下载的位置,选中jar包点击“打开”即可。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43096786/article/details/108444837