一.Junit 是什么?
JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

注意:Junit 测试也是程序员测试,即所谓的白盒测试,它需要程序员知道被测试的代码如何完成功能,以及完成什么样的功能

二.Junit 能做什么?
我们知道 Junit 是一个单元测试框架,那么使用 Junit 能让我们快速的完成单元测试
通常我们写完代码想要测试这段代码的正确性,那么必须新建一个类,然后创建一个 main() 方法,然后编写测试代码。如果需要测试的代码很多呢?那么要么就会建很多main() 方法来测试,要么将其全部写在一个 main() 方法里面这也会大大的增加测试的复杂度,降低程序员的测试积极性。而 Junit 能很好的解决这个问题,简化单元测试,写一点测一点,在编写以后的代码中如果发现问题
可以较快的追踪到问题的原因,减小回归错误的纠错难度

三.单元测试的工具有JUnit、TestNG、Mockito、Unitils等,其中JUnit、TestNG比较主流

JUnit4相关注解:
@BeforeClass:在所有测试方法前执行一次,一般在其中写上整体初始化的代码
@AfterClass:在所有测试方法后执行一次,一般在其中写上销毁和释放资源的代码。
@Before:在每个测试方法前执行,一般用来初始化方法(比如我们在测试别的方法时,类中与其他测试方法共享的值已经被改变,为了保证测试结果的有效性,我们会在@Before注解的方法中重置数据
@After:在每个测试方法后执行,在方法执行完成后要做的事情
@Test(timeout = 1000):指明要被测试的方法(测试方法执行超过1000毫秒后算超时,测试将失败)
@Test(expected = Exception.class):测试方法期望得到的异常类,如果方法执行没有抛出指定的异常,则测试失败
@Ignore:执行测试时将忽略掉此方法,如果用于修饰类,则忽略整个类。
@Test:指明要被测试的方法。
@RunWith:指定用什么方式策略去运行这些测试集、类、方法。
@ActiveProfiles(“xxx”):在测试的时候启用某些Profile的Bean。

注:JUnit5不仅新增了@ParameterizedTest注解等,还对JUnit4的部分注解进行了调整,如:注解名称发生了变化(功能几乎没变)等。

四.断言Assert:
程序员在测试时,使用断言来判断某些逻辑条件必须满足。断言判断为真,下面的一些业务逻辑才可以进行下去,如果断言判断为假,程序就会"报错"甚至是"崩溃"

断言与异常、错误的区别:
"断言"通常是给程序开发人员自己使用,并且在开发测试期间使用。而异常等在程序运行期间触发。通常"断言"触发后程序"崩溃"退出,不需要从错误中恢复。而"异常"通常会使用try/catch等结构从错误中恢复并继续运行程序

断言简单使用示例: Assert.assertEquals(result, 3); 断言还有很多方法

注:与断言(assert)相似的叫假设(assume)。当断言不成立时,当次测试的结果状态将会是测试失败;
而当假设不成立时,当次测试的结果状态不是失败,而是假设。断言用得想多一些,本人也不介绍假设

注:未使用断言的单元测试,不是一个合格的单元测试;使用System.out…的单元测试不是一个合格的单元测试;
需要人员盯着观察的单元测试,不是一个合格的单元测试。

五.单元测试时的事务回滚:
在单元测试时,有时我们会进行事务回滚来恢复现场,设置方式为:在类上或方法上加@Transactional注解

测试代码:

public class Calculator{public int add(int a,int b){return a+b;}public int sub(int a,int b){return a-b;}}public class CalculatorTest {
// @Test
// public void testAdd(){
//  Calculator c = new Calculator();
//  int result = c.add(1, 2);
//  Assert.assertEquals(result, 3);
// }// @Test
// public void testSub(){
//   Calculator c = new Calculator();
//   int result = c.sub(2,1);
//   Assert.assertEquals(result,1);
// }Calculator c = null;@Beforepublic void testBeforeClass(){c = new Calculator();}@Testpublic void testAdd(){int result = c.add(1, 2);if(result==3){System.out.println("add()方法正确");}}@Testpublic void testSub(){int result = c.sub(2, 1);if(result==1){System.out.println("sub()方法正确");}}}public class JunitTest {public JunitTest(){System.out.println("构造函数");}@BeforeClasspublic static void beforeClass(){System.out.println("@BeforeClass");}@Beforepublic void befor(){System.out.println("@Before");}@Testpublic void test(){System.out.println("@Test");}@Ignorepublic void ingore(){System.out.println("@Ignore");}@Afterpublic void after(){System.out.println("@After");}
@AfterClasspublic static void afterClass(){System.out.println("@AfterClass");}
}

Java之Junit测试框架相关推荐

  1. Java高级特性 第10节 IDEA和Eclipse整合JUnit测试框架

    一.IDEA整合Junit测试框架 1.安装插件 打开File菜单的下拉菜单settings[设置] : 点击左侧Plugins[插件]菜单 在输入框中输入JUnitGenerator 2.0,点击I ...

  2. 测试学习java_使用Junit测试框架学习Java

    前言 在日常的开发中,离不开单元测试,而且在学习Java时,特别是在测试不同API使用时要不停的写main方法,显得很繁琐,所以这里介绍使用Junit学习Java的方法.此外,我使用log4j将结果输 ...

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

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

  4. tdd java_适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)

    tdd java 使用类似于BDD的语法,Java 8和Mockito-AssertJ二重奏为Idea调整JUnit测试类模板. 本文涵盖的主题似乎很简单. 但是,根据我的培训师经验,我知道(不幸的) ...

  5. 适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)

    使用类似BDD的语法,Java 8和Mockito-AssertJ二重奏为Idea调整JUnit测试类模板. 本文涵盖的主题似乎很简单. 但是,根据我的培训师经验,我知道(不幸的是)这不是常见的做法. ...

  6. java contains_Java常用测试框架大全,不要只会Junit

    介绍 要做好测试驱动开发,意识习惯最重要,其次也得回编写优雅的单元测试.java测试框架很多,各种断言和注解,有点混乱,编写测试时老师搞不清该用哪个. 本文简单梳理java常用的几个测试工具:Juni ...

  7. java 计算器 junit测试_Java中Junit4测试实例

    Junit简介 JUnit: JUnit是一个Java语言的单元测试框架. 单元测试:单元测试的目的不是证明你的程序是正确的,而是证明你的程序没有错误 目前流行的版本3.8和4.0 Junit3.X: ...

  8. junit4 单元测试框架_超越JUnit –测试框架的替代方案

    junit4 单元测试框架 JUnit是事实上的Java单元测试框架,但是可能有一些新的(不是那么新的)框架可以用于Web开发. 在采用之前可能要问自己的问题: 它们是否快速,容易开发并因此成本低廉? ...

  9. 超越JUnit –测试框架的替代方案

    JUnit是事实上的Java单元测试框架,但是可能有一些新的(不是那么新的)框架可以用于Web开发. 在采用之前可能要问自己的问题: 它们是否快速,容易开发,因此成本低廉? 他们运行快并因此鼓励采用吗 ...

最新文章

  1. ClassLoader(二)- 加载过程
  2. Java面试题技术类一
  3. zabbix报错:Zabbix服务启动不了
  4. Microsoft Dynamics CRM server 2013   一般销售流程之 订单 简单介绍
  5. 【MySQL】错误#1217:外键约束引起的错误
  6. Windows Server 2008域中组的简析
  7. 【PostgreSQL-9.6.3】设置log参数
  8. 快递实名制正式实施 市民最担心个人信息泄露
  9. 计算机语言丛书学习:C\C++\JAVA\Python 基础-案例-应用
  10. java实现kotlin接口_Kotlin 接口与 Java8 新特性接口详解
  11. iconfont阿里巴巴矢量图标库使用步骤
  12. C语言课程设计-车辆信息管理系统
  13. 思考模式之“5W1H“
  14. ENVI中计算植被覆盖指数
  15. php接入北斗定位,手机如何连接北斗卫星?
  16. 电商API:淘宝/天猫获取sku详细信息
  17. 上海远丰:打破双11魔咒,让企业电商两条腿走路
  18. 中国教育模式的颠覆者--兄弟会
  19. MATLAB 面向对象编程(十二)抽象类
  20. FM知名芯片商芯略总裁因侵权被警方拘留

热门文章

  1. kotlin和java和hashmap转换
  2. 腾讯游戏项目总监姚晓光作客51CTO技术聊天室
  3. 百度数据众包,一门AI新基建的“基建”生意
  4. [转载]SAP_HUM_HU02里为物料库存更换HU号码的操作
  5. MES制造执行系统8大的关键数据,你造吗?
  6. PTC Creo View 8.0.0.0
  7. 微信小程序对nick_name进行base64编码操作java
  8. C语言基础01——初识C语言
  9. Wonderware Historian Servers 操作
  10. CST2021安装方法与安装问题解决