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上找到了一个好方法. 简单 ...
随机推荐
- Google v8 - Hello world
OS:Window 7 1.下载v8 zip:https://github.com/v8/v8,解压zip,重命名v8-master文件夹为v8. 2.下载安装svn:http://tortoises ...
- HDU1003 dp 动态规划解析
Input The first line of the input contains an integer T(1<=T<=20) which means the number of te ...
- 根据WSDL生成代理类方式
方式一: 1.使用VS2010提供的工具wsdl.exe由WSDL文件生成cs文件 使用wsdl.exe的/serverInterface选项(或缩写的 /si)指定输入的wsdl文件(注意,如果要转 ...
- 第 9 章 模板方法模式【Template Method Pattern】
以下内容出自:<<24种设计模式介绍与6大设计原则>> 周三,9:00,我刚刚坐到位置,打开电脑准备开始干活. “小三,小三,叫一下其它同事,到会议室,开会”老大跑过来吼,带着 ...
- Java SE/ME/EE的概念介绍
转自 Java SE/ME/EE的概念介绍 多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(package)的形式提供,不同版本的Java提供不同的包,以面向特定的应用. ...
- 【BZOJ 1319】 Sgu261Discrete Rootsv (原根+BSGS+EXGCD)
1319: Sgu261Discrete Roots Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 389 Solved: 172 Descriptio ...
- AFNetworking网络请求的get和post步骤
1.首先通过第三方:CocoaPods下载AFNetworking 1.1.先找到要查找的三方库:pod search + AFNetworking 1.2.出来一堆列表页面,选择三方库最新版本命 ...
- 深入了解View实现原理以及自定义View详解
下面几篇文章对View的原理讲的非常详细. Android LayoutInflater原理分析,带你一步步深入了解View(一) Android视图绘制流程完全解析,带你一步步深入了解View(二) ...
- 1.linux下Kconfig编写规范
http://www.linuxidc.com/Linux/2011-10/44721.htm
- bzoj1559
自动机上状压dp,把单词是否存在压成二进制位注意这里面某些单词会包含其他单词,所以某些自动机上有些状态点对应多个二进制位方案只要再顺着有方案的状态搜一遍即可 ..,'a'..'z'] of longi ...