Junit初体验
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初体验的更多相关文章
- 【转】Junit初体验
Junit是用来做测试的,无论是单元测试,还是接口测试,都可以通过调用Junit来验证被调用方法的正确性.当然,要验证一个方法的正确性,还可以采用main方法,通过输出每一个result,人为比对其正 ...
- protobuf初体验
概念介绍 Protocol buffers 是google公司的与语言无关.与平台无关的.可扩张的为序列化话结构数据,就像xml一样,办事更加的小巧.快速.简单.Protocol buffers 目前 ...
- junit4初体验
OK,现在我们正式开始junit4系列的整理.前面的junit38作为4的补充知道就好了,实际编码中我们以4为主.这里先来一把junit的初体验,同时也让我们来一步一步的了解下TDD的好处. ORM大 ...
- hibernate--CRUD初体验
hibernate的crud操作初体验. 看具体实例 package com.fuwh.model; import javax.persistence.Column; import javax.per ...
- Android开发学习之路--百度地图之初体验
手机都有gps和网络,通过gps或者网络可以定位到自己,然后通过百度,腾讯啊之类的地图可以显示我们的地理位置.这里学习下百度地图的使用.首先就是要申请开发者了,这个详细就不多讲了.http://dev ...
- Spring JDBCTemplate连接SQL Server之初体验
前言 在没有任何框架的帮助下我们操作数据库都是用jdbc,耗时耗力,那么有了Spring,我们则不用重复造轮子了,先来试试Spring JDBC增删改查,其中关键就是构造JdbcTemplate类. ...
- SSH初体验系列--Hibernate--2--crud操作
Ok,今天比较详细的学习一下hibernate的C(create).R(read).U(update).D(delete) 相关api... 前言 Session: 是Hibernate持久化操作的基 ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
随机推荐
- Sumbline编译Less
Less教程 Sublime Text 2的Less2Css插件介绍与安装 网址 http://fdream.net/blog/article/783.aspx 如果出现node.exe不是内部命令的 ...
- PHP - 传入WebService服务端带中文字符的序列化字串不能反序列化的解决方法
因工作需要,用了web服务,通过远程调用的方式来检索雅虎拍卖数据.前几天遇到一个问题,现在记录一下 客户端: $res = $this->client->call('Get_YahooDa ...
- Boost.Build 简明教程
Boost.Build 简明教程 目录1. 介绍2. 构建过程3. 基本任务4. 项目管理5. 最佳实践6. 规则参考7. 特征参考 介绍 编译器和平台无关编译系统Boost.Build是一个高级编译 ...
- hdu-A+B问题,大数加法
格式问题很头疼啊 Input The first line of the input contains an integer T(1<=T<=20) which means the num ...
- combo下拉列表选择
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 二师兄VPN加速器
http://www.2-vpn2.org/home.action?ic=B003CC4C47
- String的一些细节
String 常量池问题 (1) 字符串常量的"+"号连接,在编译期字符串常量的值就确定下来, 拿"a" + 1来说,编译器优化后在class中就已经是a1. ...
- bootstrap兼容IE8 解决办法
bootstrap有使用CSS3,所以ie9以下浏览器不会很顺畅.IE9以下的兼容性不是很好.IE本身就是怪胎,就搞一些和外界标准不一致.搞得web开发考虑这考虑那的兼容性,蛋疼! 基本上css3的没 ...
- form表单提交的方法
最近研究了下html中,form保单提交的几种方法,现与大家分享一下(注:网上可能已经有好多版本了,这里自己写下来做个总结了,哈!): 方法一:利用form的onsubmit()函数(经常使用) &l ...
- CTSC && APIO 总结
先说CTSC吧,第一试其实不难但是下意识觉得CTSC不就只能骗分吗,然后就全上暴力了.然而第二题再一次看漏了条件,即答案总和小于等于1e6.第三题现在回想起来要不然就是没有思考,要不然就是没学过数学, ...