一:介绍

接着上次的课程,今天我们学习JUnit4的新特性 assertThat()方法,这种方式和其余的assert方法比起来,更加接进英语.

二:分析API

API中的例子:

参数

T Actual:你要计算比较的值

org.hamcrest.Matcher<T> matcher:规则匹配器

这个匹配器类是org.hamcrest.Matcher,该类下有许多用于比较计算的静态方法,这个包JUnit中是没有的,要去Hamcrest官网下载,具体链接可以自己百度或者看我上篇文章的链接。

三:使用AssertThat()测试四则运算

Calculator类代码:

package com.ksjl.junit4;

/**
* @author 旷世绝伦
*
*
* */ public class Calculator { // 四则运算 public int plus(int x, int y) {
return x + y;
} public int subtraction(int x, int y) {
return x - y;
} public int multiplication(int x, int y) {
return x * y;
} public double division(double x, double y) {
return x / y;
} }

测试类:

package com.ksjl.junit4.test;

import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*; //注意这边是静态引入
import static org.hamcrest.Matchers.*;
import com.ksjl.junit4.Calculator; /**
* @author 旷世绝伦
*
*
* */ public class CalculatorTest { private static Calculator cal = null; @BeforeClass
public static void beforeClass() {
cal = new Calculator();
} @Test
public void testAll() {
int result = cal.plus(5, 5); // 加法
assertThat(result, is(10));
result = cal.subtraction(5, 5);// 减法
assertThat(result, greaterThanOrEqualTo(0));
result = cal.multiplication(5, 5);// 乘法
assertThat(result, allOf(lessThan(30), greaterThan(20))); // 满足两个条件
double result2 = cal.division(10.0, 3.0);// 除法
assertThat(result2, closeTo(3.3, 0.3)); //判断是否在3.3 左右 误差不超过正负0.3
} }

工程目录,大家看下,一共要导3个包,如下:

运行测试,看到绿色就OK了,是不是So Easy?

四:添加一个Student类(同时测试多个类,体现使用JUnit的好处)

Student代码:

package com.ksjl.junit4;

/**
* @author 旷世绝伦
*
* */
public class Student { private String name="tom"; public String getName() {
return name;
} }

测试类代码:

package com.ksjl.junit4.test;

import org.junit.BeforeClass;
import org.junit.Test;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import com.ksjl.junit4.Student; /**
* @author 旷世绝伦
*
* */ public class StudentTest { private static Student student = null; @BeforeClass
public static void beforeClass() {
student = new Student();
} @Test
public void testAll() {
String name = student.getName();
assertThat(name, is("tom"));
assertThat(name, not("to"));
assertThat(name, containsString("to"));// 是否包含to
assertThat(name, startsWith("t"));
assertThat(name, endsWith("m"));
assertThat(name, equalTo("tom"));
assertThat(name, equalToIgnoringCase("Tom"));
assertThat(name, equalToIgnoringWhiteSpace("tom"));//忽略空格是否等于tom
} }

工程目录如下:

这时候我们点击com.ksjl.junit.test包Run As Junit Test 就能同时测试两个类,没问题,全部正确。

大家是否感到了新特性的好处呢?

五:其他

1.     org.hamcrest.Matchers类中有很多方法,我就不一一说了,例如能测试Map和List ,大家自己看API,自己做实验,API在哪看?

找到hamcrest-library-1.3-javadoc.jar 解压 ,目录下index.html就是API

2.     如果遇到ClassLoader的错误,这是因为类加载器不同的原因,请将jar包像我一样布置,就没问题了.

六:总结

更详细的资料请自己查阅API,入门教程到此结束,算是带大家粗略的认识了下JUnit,谢谢大家!

[置顶] JUnit入门教程(二)的更多相关文章

  1. 无废话ExtJs 入门教程二十一[继承:Extend]

    无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...

  2. 无废话ExtJs 入门教程二十[数据交互:AJAX]

    无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...

  3. 无废话ExtJs 入门教程二[Hello World]

    无废话ExtJs 入门教程二[Hello World] extjs技术交流,欢迎加群(201926085) 我们在学校里学习任何一门语言都是从"Hello World"开始,这里我 ...

  4. mongodb入门教程二

    title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...

  5. SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1

    在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...

  6. PySide——Python图形化界面入门教程(二)

    PySide——Python图形化界面入门教程(二) ——交互Widget和布局容器 ——Interactive Widgets and Layout Containers 翻译自:http://py ...

  7. Elasticsearch入门教程(二):Elasticsearch核心概念

    原文:Elasticsearch入门教程(二):Elasticsearch核心概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:ht ...

  8. RabbitMQ入门教程(二):简介和基本概念

    原文:RabbitMQ入门教程(二):简介和基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...

  9. JasperReports入门教程(二):中文打印

    JasperReports入门教程(二):中文打印 背景 在上一篇中我们介绍了JasperReport的基本入门,也展示了一个报表.但是我们的示例都是使用的英文,如果我们把需要打印的数据改为中文会怎么 ...

随机推荐

  1. Boost Thread学习笔记三

    下面先对condition_impl进行简要分析.condition_impl在其构造函数中会创建两个Semaphore(信号量):m_gate.m_queue,及一个Mutex(互斥体,跟boost ...

  2. ORACLE 安装Oracle12遇到的问题

    0.全然卸载Oracle10(Windows) 在Windows下多次安装Oracle会造成混乱.重装Oracle的话一定先要干净卸载曾经的Oracle. 一.有必要时先备份 二.卸载步骤 1.用DB ...

  3. Android四大组件--Broadcast Receiver具体解释

    本文主要讲述了: 一.BroadcastReceiver概述: 二.BroadcastReceiver事件分类 三.BroadcastReceiver事件的编程流程 四.两类BroadcastRece ...

  4. tsunami:一种基于UDP协议的高速传输

    一. 需求 近期在做数据库迁移.常常须要打包实例传输.传统scp感觉非常慢. 二. 软件信息 1. 软件主页:http://tsunami-udp.sf.net/ 2. 软件安装:直接源代码make ...

  5. 人事管理系统 c语言版

    int menu(){ printf("请按提示输入完毕操作!\n");   printf("1.查询员工信息\n");   printf("2.统计 ...

  6. Android代码混淆和项目宣布步骤记录器

    原本放在一起Android项目与发布的文件相混淆.我突然想到,为什么不写博客,分享.有这篇文章的情况下,. Android代码混淆及项目公布步骤记录 一.清理代码中的调试信息,如Log.System. ...

  7. ANR的一个实例分析

    ANR是android经常出的超时提示,以前看过一个帖子,内容是mediaplayer在release的时候出的ANR,作者也是出了方法,什么加handler之类的. 最后都么有解决,咱们先看看那位同 ...

  8. Java生成文件

    Java生成文件 1.说明 以文件路径作为參数,推断该文件是否存在,若不存在就创建文件.并输出文件路径 2.实现源代码 /** * @Title:BuildFile.java * @Package:c ...

  9. CentOS IP丢失,切换了网络连接导致的vmnet8未启用dhcp

    解决了, 这个问题是我在开启虚拟机ubuntu系统的过程中, 在主机win7上切换了网络连接导致的, 就是刚开始我用的无线宽带上网, 此时开启了ubuntu ,然后使用过程中,我在win7上切换回静态 ...

  10. 贪心算法-找零钱(C#实现)

    找零钱这个问题很清楚,无非就是始终拿可以取的最大面值来找,最后就使得张数最小了,这个实现是在假设各种面值足够多的情况下. 首先拖出一个界面来,最下面是一个listbox控件 对应的代码:问题比较简单, ...