单元测试

1.简介

在日常开发中,我们编写的任何代码都需要经过严谨的测试才可以发布。以往的测试方法都是通过编写一个main函数进行简单的测试,并使用大量的print语句输出结果,这种方法其实是不可取的,它将导致大量的冗余代码在程序中,并且是不利于维护的。因此,业界就提出了单元测试的概念。所谓的单元测试是指对软件中的最小可测试进行检查和验证。(最小单元可以是一个方法,也可以是一个类,根据具体的场景进行定义)。在java中通常使用Junit工具来完成。

2.使用

将下载的Junit的jar文件导入到项目中即可。接下来就可以编写单元测试类,测试类也有相应的命名规范。通常以XxxTest方式来命名,Xxx就是你要测试的类名。测试类中编写的任何测试方法是不需要返回值得。测试方法名规范testXxx(),Xxx表示目标类中的方法名。

2.1 Junit的注解

注解 说明
@Test 标注在方法上,表示当前方法是一个测试方法
@Before 标注在方法上,用于在执行任何单元测试之前先执行的方法
@After 标注在方法上,用于在执行任何单元测之后再执行的方法
@BeforeClass 标注在静态方法上,在测试方法之前先执行,且执行一次。通常可用于初始化操作
@AfterClass 标注在静态方法上,在测试方法之前先执行,且执行一次。通常可用于初始化操作
@Ignore 标注在方法上,表示忽略当前的此方法

例子:

public class UserDaoTest {

@BeforeClass
public static void before1(){
System.out.println("before1");
}

@AfterClass
public static void after1(){
System.out.println("after1");
}

@Before
public void before2(){
System.out.println("before2");
}

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

@Test
public void testSaveUser(){
UserDao dao = new UserDao();
dao.saveUser();
}

@Test
//@Ignore //忽略当前的此方法
public void testFindUserById(){
UserDao dao = new UserDao();
dao.findUserById();
}
}

2.2 使用断言(Assert)

所谓断言,就是将预期的条件或者表达式参与测试中,判定测试的结果是否达到预期想要的结果。

例子:

import edu.nf.service.UserService;
import org.junit.Test;
//使用静态导入(导入的是某个静态方法)
import static org.junit.Assert.*;


public class UserServiceTest {

@Test
public void testFindUserName(){
UserService service = new UserService();
//使用断言进行测试
//第一个参数是此预期返回的结果,第二个是目标方法的返回值
//如果两个值相等,则测试通过
assertEquals("hh",service.findUserName(1001));
}
}

Assert类中提供了众多的Assert方法来进行比较,而这些方法的返回值都是void,如果判定结果不用通过则引发相应的异常信息。常用断言方法如下:

方法 说明
assertEquals 判定两个值是否相等
assertNotNull 判定结果不允许为空
assertNull 判定结果为空
assertSame 判定两个对象是否是同一个引用
assertArrayEquals 判定两个数组的内容是否相等
... ...

2.3 测试套件

所谓的测试套件,就是将一系列的单元测试类集合中在一起进行批量的单元测试。

测试套件需要的注解:

注解 说明
@RunWith 标注在类上,表示当前类是一个测试套件的运行器
@SuiteClasses 标注在类上,用于集中所有的单元测试类的class

例子:

@RunWith(Suite.class)
@Suite.SuiteClasses({UserDaoTest.class, UserServiceTest.class})
public class SuiteTest {
}

java单元测试的更多相关文章

  1. Java单元测试技术1

    另外两篇关于介绍easemock的文章:EasyMock 使用方法与原理剖析,使用 EasyMock 更轻松地进行测试 摘要:本文针对当前业软开发现状,先分析了WEB开发的技术特点和单元测试要解决的问 ...

  2. 转载-使用 Feed4JUnit 进行数据与代码分离的 Java 单元测试

    JUnit 是被广泛应用的 Java 单元测试框架,但是它没有很好的提供参数化测试的支持,很多测试人员不得不把测试数据写在程序里或者通过其它方法实现数据与代码的分离,在后续的修改和维护上有诸多限制和不 ...

  3. Java单元测试工具:JUnit4(一)(二)(三)(四)

    Java单元测试工具:JUnit4(一)--概述及简单例子 Java单元测试工具:JUnit4(二)--JUnit使用详解 Java单元测试工具:JUnit4(三)--JUnit详解之运行流程及常用注 ...

  4. Java单元测试(Junit+Mock+代码覆盖率)

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  5. Java单元测试框架 JUnit

    Java单元测试框架 JUnit JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于KentBeck的sUnit的xUnit家族中为最成功的一 ...

  6. Maven的安装配置及初次创建项目与java单元测试工具JUnit

    Maven  安装     1.把maven安装包解压到某个位置     2.配置M2_HOME环境变量指向这个位置 3.在path环境变量中添加;%M2_HOME%\bin 配置镜像 国内的阿里云镜 ...

  7. 原!!关于java 单元测试Junit4和Mock的一些总结

    最近项目有在写java代码的单元测试,然后在思考一个问题,为什么要写单元测试??单元测试写了有什么用??百度了一圈,如下: 软件质量最简单.最有效的保证: 是目标代码最清晰.最有效的文档: 可以优化目 ...

  8. 有效使用Mock编写java单元测试

    Java单元测试对于开发人员质量保证至关重要,尤其当面对一团乱码的遗留代码时,没有高覆盖率的单元测试做保障,没人敢轻易对代码进行重构.然而单元测试的编写也不是一件容易的事情,除非使用TDD方式,否则编 ...

  9. Java单元测试(Junit+Mock+代码覆盖率)---------转

    Java单元测试(Junit+Mock+代码覆盖率) 原文见此处 单元测试是编写测试代码,用来检测特定的.明确的.细颗粒的功能.单元测试并不一定保证程序功能是正确的,更不保证整体业务是准备的. 单元测 ...

  10. 使用JUnit4进行java单元测试

     第一步:创建一个java工程,在工程中创建一个被单元测试的Student数据类,代码如下: package com.junittest.yu; public class Student { priv ...

随机推荐

  1. ⑤早起的鸟儿有虫吃-JSTL核心标签库[收藏]

    介绍 JSTL 全名为Java Server Pages Standard Tag Library(JSP Standard Tag Library),它的中文名称为JSP 标准标签函数库. Web  ...

  2. 用POLARDB构建客到智能餐饮系统实践

    在新零售成为大趋势的今天,餐饮行业也加入到这一浪潮之中.智能餐饮系统将帮助餐饮行业从多个维度提升自己的运营能力和收益,而打造智能餐饮系统SaaS化能力也成为了目前的一个热点.本文中果仁软件联合创始人& ...

  3. 基本排序算法Golang

    摘要 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 冒泡排序 func BubbleSort(ve ...

  4. Magicodes.NET框架之路——让代码再飞一会(ASP.NET Scaffolding)

    首先感谢大家对Magicodes.NET框架的支持.就如我上篇所说,框架成熟可能至少还需要一年,毕竟个人力量实在有限.希望有兴趣的小伙伴能够加入我们并且给予贡献.同时有问题的小伙伴请不要在群里询问问题 ...

  5. Jenkins持续集成介绍及插件安装版本更新演示(一)--技术流ken

    Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. Jenkins功能包括: ...

  6. 注解@CrossOrigin解决跨域问题

    注解@CrossOrigin 出于安全原因,浏览器禁止Ajax调用驻留在当前原点之外的资源.例如,当你在一个标签中检查你的银行账户时,你可以在另一个选项卡上拥有EVILL网站.来自EVILL的脚本不能 ...

  7. 【Spring】使用Spring发送邮件

    Spring Email抽象的核心是MailSender接口,MailSender的实现能够通过连接Email服务器实现邮件发送的功能,如下图: Spring自带一个MailSender的实现就是Ja ...

  8. 程序员晋级CTO之路的8大准则

    推荐阅读: 大数据智慧平台落地方案 Nginx + 阿里云SSL + tomcat 实现https访问代理 永远别忘了TD 再确认测试代码前,先找别人帮你检查下是否无误.在别人做之前尽量检查出bug并 ...

  9. CodeMirror 使用

    codemirror是一款在线代码编辑器,官网:https://codemirror.net/doc/manual.html#overview 使用说明 第一步 安装: npm install cod ...

  10. hihoCoder编程练习赛52

    题目1 : 字符串排序 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 一般我们在对字符串排序时,都会按照字典序排序.当字符串只包含小写字母时,相当于按字母表" ...