介绍

要做好测试驱动开发,意识习惯最重要,其次也得回编写优雅的单元测试。java测试框架很多,各种断言和注解,有点混乱,编写测试时老师搞不清该用哪个。

本文简单梳理java常用的几个测试工具:Junit,AssertJ,hamcrest,Mockito,JSONassert。

一、Junit

Junit可以说是java测试的标准,谁都知道,经常用,或者在其他框架下使用。但一般只用到几个注解(@Test,@Before,@After)和断言。

API

Assert: 断言的方法集合

TestCase:运行多重测试的固定装置

TestResult: 执行测试样例的结果

TestSuite: 测试集合

注解

  • @Test:测试方法标志
  • @RunWith: 套件测试
@RunWith(Suite.class)@Suite.SuiteClasses({ TestJunit1.class, TestJunit2.class})public class JunitTestSuite { }
  • @Ignore: 忽略测试
  • @test(timeout): 测试用例执行时间超时失败
  • @Test(expected = xxException.class):异常断言
  • @Parameters: 测试数据集合
  • @Rule:有点像拦截器,可以自己定义。
  • @DisplayName: 测试用例名字(junit 5)

断言

  1. assertEquals
  2. assertSame
  3. assertTrue
  4. assertNull
  5. 还有些其他扩展用法和注解,其不一一。

二、AssertJ

java流式断言库。

@Test public void assartJTest() { assertThat("Frodo").isEqualTo("Frodo").isEqualToIgnoringCase("frodo"); assertThat(42).isGreaterThan(38).isGreaterThanOrEqualTo(38); assertThat(Dates.parse("2014-02-01")) .isEqualTo("2014-02-01") .isNotEqualTo("2014-01-01") .isAfter("2014-01-01").isBefore(Dates.parse("2014-03-01")); assertThat(newArrayList(1, 2, 3)) .contains(1, atIndex(0)) .contains(2, atIndex(1)) .contains(3).isSorted(); assertThat(RequestMapping.class).isAnnotation(); assertThat("string").isInstanceOf(String.class); }

从以上示例可知,它可以对java基本数据结构、List、Map、Class进行流式断言。

三、 Hamcrest

Hamcrest 是一个测试的框架,它提供了一套通用的匹配符 Matcher,灵活使用这些匹配符定义的规则,程序员可以更加精确的表达自己的测试思想,指定所想设定的测试条件。

都通过assertThat灵活匹配各种类型数据,下面是一些基本示例。

@Test public void sampleTest() { int a = 12; assertThat(a, is(12)); assertThat(a, not(11)); assertThat(a, greaterThan(1)); String str = "Hello World"; assertThat(str,containsString("Hello")); assertThat(str,equalToIgnoringCase("hello world")); List stringList = new ArrayList<>(); stringList.add("e1"); stringList.add("e2"); assertThat(stringList, hasItem("e1")); assertThat(stringList, anything()); }

Hamcrest自带了很多匹配器,如果不能满足,还可以自定义。

四、Mockito

上面列出的框架主要是断言,从名字知道,Mockito 是一个mock工具,用于模拟各种对象和组件,使单元测试更加独立。

Mockito可以模拟对象,模拟函数返回值,模拟void类型的异常,验证函数执行次数和顺序,对参数进行匹配和捕获。

@Test public void mockSample(){ ArrayList mockList = mock(ArrayList.class); //stubbing when(mockList.get(0)).thenReturn("first").thenReturn("second"); assertThat(mockList.get(0)).isEqualTo("first"); assertThat(mockList.get(0)).isEqualTo("second"); when(mockList.get(anyInt())).thenReturn("element"); assertThat(mockList.get(0)).isEqualTo("element"); mockList.add("third"); mockList.clear(); mockList.clear(); //veryfy 执行次数 verify(mockList,times(1)).add("third"); verify(mockList,times(2)).clear(); verify(mockList,atLeastOnce()).clear(); doThrow(new RuntimeException()).when(mockList).clear(); }

mockito 功能很多很强大,其不一一,后面又时间再补充或专门总结。还有很多实用的注解。

五、JSONassert

除了协议层的Json格式,好多地方都用到json作为数据传递格式,JSONassert是一个专门用于json断言的工具。

语法:

JSONAssert.assertEquals(expectedJSON, actualJSON, strictMode);

示例

 @Test public void test() throws Exception { //get json from server //language=JSON String jsonStr ="{"id":1,"name":"thoreau"}"; JSONAssert.assertEquals("{id:1}

java contains_Java常用测试框架大全,不要只会Junit相关推荐

  1. java流行的测试框架调研+市面上书籍调研

    主要是根据51job的右侧来判断 java测试框架名称 51job职位数量 百度词条数量 JUnit 732 48,500,000 REST Assured 3 19,500,000 Selenium ...

  2. Java工程师常用Linux命令大全

    Java工程师常用Linux命令大全 查看目录下文件 ll 显示当前目录下文件详细信息. ll -a 显示当前目录下所有文件(包括隐藏文件) 查看当前目录 pwd 查看当前路径 查看进程 ps -a ...

  3. 一文了解十大 Java 开发者必备测试框架!

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 想要提升自己的自动化测试技能吗?本文将介绍10个优秀的 Java 测试框架和库,来提升你的自 ...

  4. python 几种常用测试框架

    测试的常用规则 一个测试单元必须关注一个很小的功能函数,证明它是正确的: 每个测试单元必须是完全独立的,必须能单独运行.这样意味着每一个测试方法必须重新加载数据,执行完毕后做一些清理工作.通常通过se ...

  5. java的mock测试框架

    无论是敏捷开发.持续交付,还是测试驱动开发(TDD)都把单元测试作为实现的基石.随着这些先进的编程开发模式日益深入人心,单元测试如今显得越来越重要了.在敏捷开发.持续交付中要求单元测试一定要快(不能访 ...

  6. java开发常用四大框架(现在java 最流行的开发框架)

    JavaEE开发的四大常用框架是哪些? Struts Struts是一个基于Sun Java EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的. Struts框架可分为以下四个主要部 ...

  7. java开发常用四大框架_前端开发框架

    jsf,struts,struts2,hibernate,spring,webwork,dwr都是很流行的最流行的框架现在只有2种struts+spring+hibernate(ssh)struts+ ...

  8. Java Karate BDD测试框架在POST接口中的应用

    应用场景:在自动化的测试中,测试数据是如何被应用的直接影响测试脚本运行的结果.而且更致命的是一味地应用"静态数据",自动化测试就像断了的链条. 学习要点: 1.如何动态更改post ...

  9. java移动端接口测试_走进Java接口测试之测试框架TestNG数据驱动(入门篇)

    前言 我们在前面的文章中,和大家分享过接口自动化测试一些基本的实现方法,但是,你很快就会发现,如果在测试脚本中硬编码测试数据的话,测试脚本灵活性会非常低.而且,对于那些具有重复的请求,而只是测试入参不 ...

最新文章

  1. centos7中systemctl 对系统服务的控制
  2. 转载:如何快速转载CSDN及博客园中的博客
  3. 第十二章:Java_常用类
  4. html折叠菜单列子,基于Vue.js+bootstrap4的左侧可伸缩式菜单
  5. sony android电视关机,【索尼 KDL-48WM15B 48英寸 LED电视使用体验】通电|待机|关机|加载|设置_摘要频道_什么值得买...
  6. 一路踩坑,被迫聊聊 C# 代码调试技巧和远程调试
  7. python 判断时间是否大于6点_python中判断时间间隔的问题
  8. Unity 导出Supermap exe
  9. Android 渗透测试学习手册 第六章 玩转 SQLite
  10. Ubuntu环境搭建零:安装Linux虚拟机
  11. 解决 Chrome 下载不了东西 失败 - 已屏蔽 的问题
  12. k8s学习: 创建 mysql 任务
  13. 针对芯片测试行业,常见stil,vcd,wgl,文件的转化,到93K,chroma,小总结
  14. linux安装nginx防火墙,Centos7 防火墙关闭与nginx无法访问
  15. 美国音乐学院计算机音乐专业排名2015年,美国音乐学校排名Top100
  16. oracle数据库启动报错ora-27102
  17. ubuntu14.04 iso硬盘安装
  18. UI设计师这些面试技巧你知道吗?
  19. 通达信操作箱体,箱顶和箱底线指标公式源码 红色持股绿色持币
  20. Linux对大于2T的磁盘分区方法及创建逻辑卷LVM

热门文章

  1. [Tesseract]Tesseract 在 Visual Studio 2012 中的配置及调用
  2. 矩阵键盘程序_独立按键与矩阵按键
  3. ensp 查看配置命令
  4. ieee1284controller怎么添加打印机_打印机提示脱机状态,如何恢复连接?
  5. kali换源无法保存_Kali Linux 2.0更新源无法正常使用(解决)
  6. 如何快速正确的安装 Ruby, Rails 运行环境
  7. mysql 汇总行_MySQL查询汇总行的值并对结果进行排序?
  8. sqlserver 库服务器导数据
  9. BZOJ 2458 最小三角形(分治)
  10. Silverlight与Flash的技术比较(图)