JUnit是一个开源的Java单元测试框架,由 Erich Gamma 和 Kent Beck 开发完成。

主要是为了方便开发人员在自己开发的过程中能够及时的发现和解决bug用的,一方面自己可以通过单元测试及时解决掉一些存在的问题,另一方面对于部门或者小组来说,大家如果都把验证的工作放在联调上面,那将会是个灾难性的工作。尤其是涉及到扯皮的事情的时候,充分的自验证能够给你带来底气和减少加班的时间的,所以学习单元测试还是非常有必要滴。

这里我采用的是maven快速工程的形式搭配junit来做测试:

大概步骤:new一个快速启动的maven工程(配置网上一大堆),pom文件主要是引用了junit如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>exercise</groupId>
<artifactId>exercise.test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<type>jar</type>
<scope>test</scope>
</dependency>
</dependencies>
</project>

工程结构如下:

其中Book为一个Bean,有名称和价格两个属性。Library为一个图书馆,提供插入书籍、返回书单、返回总价格等接口。LibraryTest为图书馆的测试类,我们这里仅仅测试两个主要的函数。

其中Book类代码如下,注意如果想判断两个Book对象是否相等需要重写equal函数:

 package bean;

 public class Book {

     private String name;
private int price; public Book(){ }
public Book(String name,int price){
this.name=name;
this.price=price;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
} /**
* 当需要比较两个对象是否相等的时候需要重载equal和hashCode函数
*/
@Override
public boolean equals(Object o) {
if (o instanceof Book) {
return (this.name == ((Book)o).getName()&&this.price==((Book)o).getPrice());
} return false;
} @Override
public int hashCode() {
return 1;
}
}

Library代码如下,

 package service;

 import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import bean.Book; public class Library { private List<Book> bookList = new ArrayList<Book>(); public Library(){ } public Library(List<Book> bookList){
this.bookList=bookList;
} public void Store(Book book){
bookList.add(book);
} public void StoreAll(List<Book> bookList){
this.bookList.addAll(bookList);
} public List<Book> getBookList(){
return bookList;
} public int getPrice(){
int price = 0;
for(Book book:bookList)
{
price+=book.getPrice();
}
return price;
}
}

libraryTest代码如下:

 package service_test;

 import junit.framework.TestCase;

 import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import service.Library;
import bean.Book;
public class LibraryTest extends TestCase{ @Test
public void testGetBookList() {
Library library = new Library();
List<Book> bookList = new ArrayList<Book>();
bookList.add(new Book("c++",10));
bookList.add(new Book("java",20));
library.StoreAll(bookList);
assertEquals(library.getBookList().get(0), new Book("c++",10));
} @Test
public void testGetPrice() {
Library library = new Library();
library.Store(new Book("c++",10));
library.Store(new Book("java",20));
assertEquals(library.getPrice(), 30);
} }

运行结果如下:

改个值重新运行如下:

删除了Book类里面的equal函数以后,重新运行如下:

可以看到Junit通过本地构造数据实现与main方法一样的运行方式,但无论是间接性还是可读性都要强的多,而且测试类可以选择TestCase或者直接引入静态引用也可以,通过反编译可以看到junit里面都是一些静态方法,而测试类里面采用标注的方式进行运行

这只是最简单的测试方法,下一步还有一些mock即打桩数据的方法来应对更复杂的应用场景,下次再写。

Junit初体验的更多相关文章

  1. 【转】Junit初体验

    Junit是用来做测试的,无论是单元测试,还是接口测试,都可以通过调用Junit来验证被调用方法的正确性.当然,要验证一个方法的正确性,还可以采用main方法,通过输出每一个result,人为比对其正 ...

  2. protobuf初体验

    概念介绍 Protocol buffers 是google公司的与语言无关.与平台无关的.可扩张的为序列化话结构数据,就像xml一样,办事更加的小巧.快速.简单.Protocol buffers 目前 ...

  3. junit4初体验

    OK,现在我们正式开始junit4系列的整理.前面的junit38作为4的补充知道就好了,实际编码中我们以4为主.这里先来一把junit的初体验,同时也让我们来一步一步的了解下TDD的好处. ORM大 ...

  4. hibernate--CRUD初体验

    hibernate的crud操作初体验. 看具体实例 package com.fuwh.model; import javax.persistence.Column; import javax.per ...

  5. Android开发学习之路--百度地图之初体验

    手机都有gps和网络,通过gps或者网络可以定位到自己,然后通过百度,腾讯啊之类的地图可以显示我们的地理位置.这里学习下百度地图的使用.首先就是要申请开发者了,这个详细就不多讲了.http://dev ...

  6. Spring JDBCTemplate连接SQL Server之初体验

    前言 在没有任何框架的帮助下我们操作数据库都是用jdbc,耗时耗力,那么有了Spring,我们则不用重复造轮子了,先来试试Spring JDBC增删改查,其中关键就是构造JdbcTemplate类. ...

  7. SSH初体验系列--Hibernate--2--crud操作

    Ok,今天比较详细的学习一下hibernate的C(create).R(read).U(update).D(delete) 相关api... 前言 Session: 是Hibernate持久化操作的基 ...

  8. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  9. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

随机推荐

  1. 回顾javase点滴

    数据类型 8种基本数据类型和引用类型 数据类型 占用位数 存储方式 最小值 最大值 默认值 byte 8 1+7 -128(-2^7) 127(2^7-1) 0 short 16 1+15 -3276 ...

  2. linux下 链接 sqlserver数据库 驱动的安装

    1.必需安装freetds 安装pdo_dblib扩展首先需要安装freetds. freeTDS的最新稳定版是0.91,这个可以在官网上下载http://www.freetds.org/ ,也可以在 ...

  3. 让IIS识别PUT和DELETE请求

    转眼间年底了,突然的我就挪了窝.新的公司,新的电脑,新的服务器....面对新环境,手有些痒,于是试着编写自己的简易版restful API. restful的话,对资源的相应操作应该被体现成http动 ...

  4. iOS代码规范文档

    文件命名规范: 1. 项目统一使用类前缀ZY. 2. 分类命名+后面统一使用ZYExtension,例:NSDictionary+ZYExtension.h,常用分类定义在内部并写好文档注释.如果功能 ...

  5. 分享关于学习new BufferedWriter()方法时常遇到的一个无厘头的问题

    今天在学习IO的过程中,关于处理流BufferedWriter的使用时,遇到了一个很犯二但是又会让初学者经常没有避免的问题,百度后才发现有人和我一样二,这还是对java基础掌握得不牢固的原因啊. 首先 ...

  6. 【BZOJ 1594】 [Usaco2008 Jan]猜数游戏 (二分+并查集)

    1594: [Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面 ...

  7. CAS实现单点登录方案(SSO完整版)

    一.简介 1.cas是由耶鲁大学研发的单点登录服务器 2.本教材所用环境 Tomcat7.2 JDK1.7 CAS Service 版本    cas-server-3.4.8-release CAS ...

  8. 打造属于自己的Altium Designer 3D封装库,不需要懂专门的三维设计软件

    看到Andy_2020发的帖子“Altium Designer专题”之后,对Altium Designer的3D功能很感兴趣,着手自己做一个AD的3D封装库.刚开始按照Andy介绍的方法,学了两天So ...

  9. 2016 Web 开发资源工具大搜罗

    原文链接: 100+ Awesome Web Development Tools and Resources Web的迅猛发展对于开发者来说既是一件好事也是一件坏事.不断紧跟潮流学习新的技术.编程语言 ...

  10. AT&T汇编中系统调用和C函数调用的使用

    我的博客:www.while0.com 区别: 系统调用的参数存储在寄存器中,函数调用的则存储在堆栈中. 系统调用使用中断方式,函数调用使用call指令 相同之处: 都有返回值和输入值 返回值都存储在 ...