当前位置:首页 > java知识学习_java技术文章 > 正文

junit单元测试实例与断言原理解析

浏览931+

一、junit单元测试工具介绍

junit是java程序中用来编写测试案例的小工具,常用来编写应用软件的单元测试,是每个程序员初学者都应该学会并掌握的技术前提。

junit目前最常用的有两个版本:Junit3,Junit4,是源于测试框架xUnit发展而来,在驱动测试领域有着举足轻重的地位,junit单元测试主要用于不需要写代码的给出输入值就能出期望结果的黑盒测试以及需要编写代码的按照程序执行的白盒测试,本篇文章主要以白盒测试详解。

二、应用Junit单元测试的优势

应用junit单元测试可以精确地测试程序很小的、很明确的功能,不需要等全部代码统一完成就能测试,编写一小块功能测试一小块有助于提升代码质量,避免bug漏洞的出现。

编写好测试案例后由junit帮助我们输出测试结果,不需要人为的二次干预,并且能够分析用例出错的原因以助我们修复程序的错误。

编写好的单元测试用例都是独立存在的,跟其它测试方法互不干扰和互不受对方影响。

三、junit单元测试具体步骤与实例编写

步骤一:首先java  web项目中的pom.xml文件中引入相关junit工具的maven依赖,代码如下:

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
</dependency>

步骤二:springboot创建web项目时为了方便程序员测试会自动在包目录结构下创建名为test的目录文件夹,该文件夹下用来编写junit的测试类代码,目录结构详见下图:

test目录结构

步骤三:当我们编写测试用例时势必要写很多测试类,每个测试类中都要加入junit自带的很多注解会相当麻烦,基于java面向对象继承的特征,我们创建一个父类,其它任何的测试类测试时只需要继承该类就不用重复的添加junit注解了,父类代码如下:

package com.alibaba;
import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;
@RunWith(SpringRunner.class)
@SpringBootTest
//由于是Web项目,Junit需要模拟ServletContext,因此我们需要给我们的测试类加上@WebAppConfiguration。
@WebAppConfiguration

public class TmallApplicationTests {
@Before
public void init() {
System.out.println(“开始测试—————–“);
}
@After
public void after() {
System.out.println(“测试结束—————–“);
}
}

以上便是junit单元测试的基类,初学者的朋友或许对junit的这几个常用的测试注解不了解,下面我们梳理一下这几个注解都是什么意思。

@webappconfiguration注解:作用在实体类上,用于声明负载的ApplicationContex是WebApplicationContext,其属性指定Web资源的位置,默认情况下为SRC / main / webapp,已自定义修改为resource,实际作用就是指定我们所用的测试环境是web项目。

@RunWith注解:该注解的作用是指定我们的测试用例运行在spring框架所在的环境中。

@Before注解:标注了该注解的方法会在测试用例的测试方法执行之前先执行该方法。

@After注解:作用跟上面相反,意思是测试方法执行完之后再执行添加了@After注解的方法。

junit中还有其它一些不是很常用的注解,这里就不一一详解了,贴一张其它注解的示意图大家可以自行了解一下。

junit测试工具相关注解汇总

步骤四:实际测试类编写,如下代码编写的是测试service层的测试用例

package com.alibaba;
import com.alibaba.service.EntFileService;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
public class EntFileTest extends TmallApplicationTests {

@Autowired
private EntFileService entFileService;
@Test
public void testGetEntFileById(){
Assert.assertSame(“企业数量有误”,500,entFileService.getCount());
}
@Test
public void testGetEntFileList(){
Assert.assertSame("企业数量不为10",10,entFileService.getEntFileList());
}
}

上面的代码就是编写的测试类,继承了父类就拥有了junit单元测试的功能,标注了@Autowired注解的类就是我们需要测试的service类,测试方法上添加@Test注解告诉junit这是一个需要运行的测试的接口方法。

接下来我们剖析一下测试方法Assert.assertSame方法中各个参数的含义,第一个参数”企业数量有误”指代的是如果测试结果出错则返回的message出错提示信息,第二个参数是我们测试结果的期望值,第三个参数则是实际service类得出的结果值。

步骤五:运行测试用例,查看测试结果,运行测试方法时可以选择运行其中一个方法,也可以选择该类中所有方法同时运行,点击类左边的小图标意思是所有测试方法全部运行,点击测试方法左侧的小标意思是运行该方法,或者选中该方法名,右键选择run test也可以运行该方法,具体操作见下图,图上已经表示了操作步骤:

测试用例运行步骤示意图

步骤六:详细测试运行结果查看与分析,见下图:

测试用例结果

上图中标注的第一部分显示的是测试结果,由于测试的实际结果数值与期望值不一样,故打印出了数量有误的提示message信息以及错误原因。

上图中标注的第二部分是测试用例的覆盖范围,类的覆盖范围,方法的覆盖范围,行的覆盖范围,非常详细。

上图中标注的第三部分是预期结果和实际结果之间的详细比较,单击后将显示该结果,如上图标注的所示。

四、junit断言原理解析

junit中断言的简介

一开始刚听到断言这个词会陌生的很,真的是丈二和尚摸不到头脑,小编当时也是困惑了一下午才慢慢搞明白的,原来断言其实就是打断判断的意思,帮助我们判断单元测试的执行结果是否跟我们所预期的结果一致。

断言中提供了很多供大家使用的函数,正是这些函数提供了判断测试结果的功能,断言的判断函数都集中在Assert这个关键类中。

junit断言中的函数介绍

断言中的函数其实就是Assert提供的一些判断方法,由于这些方法全部都是static修饰的静态方法,故可以直接使用Assert.的方式调用。

Assert方法中一般会传入一个预测结果值的参数,然后再传入一个测试用例的参数,两者得出的结果进行对比以确定我们的接口方法是否有bug,具体断言函数类型参见下图:

断言中的函数汇总图

上图中展示的断言中的函数几乎涵盖了所有可以比对的数据类型,既能够判断字符串类型,又能够判断整型、对象、数组、集合以及布尔等类型,满足了实际工作中单元测试的基本需要。

junit与断言测试代码

断言的测试代码就不需要一一完整的写步骤了,因为上文中已经详细的讲述了junit单元测试的代码步骤编写,这里就拿Assert.assertEquals(xx, xx)函数测试断言的具体使用,代码如下

public class CalculatorTest {
//测试加法与期望值是否相等
@Test
public void testAdd(){
Calculator c = new Calculator();
int result = c.add(2, 3);
//断言
Assert.assertEquals("测试结果值与期望结果值不相等",5, result);
}
}

以上代码如果测试正确控制台则不会报任何异常,如果测试不正确则会抛出第一个参数中的提示不相等的消息。

以上便是junit和Assert断言的全部操作,通过我们实际代码的编写案例不难看出junit的原理解析其实很简单的,实际就是借助调用系统的main方法然后调用测试接口的目标方法,将两者的返回结果做一些判断得出结论,这样就轻而易举的完成了就接口方法的单元测试。

 

相关文章推荐

单元测试——junit4入门例子

Junit单元测试过程步骤(菜鸟也看得懂)

Junit自动单元测试以及测试覆盖率简单使用

Junit的基本使用(详解)

Junit测试工具使用

如何开始用Junit进行单元测试

Junit单元测试实验报告

JUnit4测试代码示例

Junit自动单元测试以及测试覆盖率简单使用

在eclipse中添加JUnit单元测试以及JUnit的使用注意事项