Junit初体验

时间:2021-07-08 23:56:20

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>

工程结构如下:

Junit初体验

其中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);
} }

运行结果如下:

Junit初体验

改个值重新运行如下:

Junit初体验

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

Junit初体验

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

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. &period;NET平台开源项目速览&lpar;15&rpar;文档数据库RavenDB-介绍与初体验

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

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

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

随机推荐

  1. mobile cpu上禁用alpha test的相关总结

       因为,每家芯片的特性不同,根据向framebuffer写法的不同,分为tile-based的mobile cpu,如ImgTec PowerVR,ARM Mali,一部分老版本Qualcomm  ...

  2. jquery实现点击页面其他地方隐藏指定元素

    代码实例如下: <!DOCTYPE html><html><head><meta charset=" utf-8"><meta ...

  3. color mask

    https://msdn.microsoft.com/zh-cn/library/windows/desktop/bb173595(v=vs.85).aspx void OMSetBlendState ...

  4. 【第八篇】mvc razor视图配置404 500页面

    记住是最外层的这个Web.config 在  <system.web> </system.web>节点里面配置 <customErrors defaultRedirect ...

  5. K8S API 调用

    不好意,本人比较懒,OneNote 复制粘贴的时候就是自动变成图片了.请各位看官多多见谅. 遗留问题: 目前pod仅支持修改 * and(),so...

  6. MySQL操作的一些优化

    1.用于不要使用select * from table xxx. 需要查询哪些列就在语句中指明,一个表结构复杂时,可能会有上百列,使用*来查询时会造成很大的浪费. 2.选择合适的属性及大小    例如 ...

  7. leetcode 136&period; Single Number 、 137&period; Single Number II 、 260&period; Single Number III&lpar;剑指offer40 数组中只出现一次的数字&rpar;

    136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...

  8. mongols的反向代理和负载均衡功能

    mongols是C++ 服务器基础设施库,它最近更新提供了反向代理和负载均衡功能. 以下为用mongols代理两个nodejs后端(8888和8889)并与nginx压测对比图: 压测显示mongol ...

  9. 欧拉函数-gcd-快速幂(牛客寒假算法基础集训营1-D-小a与黄金街道)

    题目描述: 链接:https://ac.nowcoder.com/acm/contest/317/D来源:牛客网小a和小b来到了一条布满了黄金的街道上.它们想要带几块黄金回去,然而这里的城管担心他们拿 ...

  10. POJ 1236 Network Of Schools 【Targan】&plus;【缩点】

    <题目链接> 题目大意: 有N个学校,每个学校之间单向可以发送软件,现在给你一些学校之间的收发关系.问你下面两个问题:至少要给多少个学校发送软件才能使得最终所有学校都收到软件:至少要多加多 ...