当前位置: 首页 > news >正文

详解junit

目录

1.概述

2.断言

3.常用注解

3.1.@Test

3.2.@Before

3.3.@After

3.4.@BeforeClass

3.5.@AfterClass

4.异常测试

5.超时测试

6.参数化测试


1.概述

什么是单元测试:

单元测试,是针对最小的功能单元编写测试代码,在JAVA中最小的功能单元是方法,单元测试针对JAVA就是单个方法的测试。目的就是保证单个方法的正常运行。

JUnit是什么:

专门针对java语言设计,使用广泛的一个标准单元测试框架。使用断言+注解的方式对单个方法进行测试。注解用来控制行为,断言用来进行判断。

2.断言

名称说明示例
assertEquals相等assertEquals(100,x)
assertArrayEquals数组相等assertArrayEquals({1,2,3},x)
assertEquals浮点数相等assertEquals(3.1415926,x)
assertNullnullassertNull(x)
assertTruetrueassertTrue(x>0)
assertFalsefalseassertFalse(x<0)
assertNotEquals不相等assertNotEquals(100,x)
assertNotNull不为空assertNotNull(x)

3.常用注解

3.1.@Test

@Test,用来注解单个测试用例,每个@Test就是个独立的单元,单个@Test的生命周期是相互独立的。

代码示例:

public class Demo1Test {Demo1 demo1;public Demo1Test(){System.out.println("建立测试用例!");}@Beforepublic void before(){System.out.println("测试开始!");demo1=new Demo1();}@Testpublic void testSum1(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}@Testpublic void testSum2(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}@Afterpublic void after(){System.out.println("测试结束!");}
}

测试结果:

3.2.@Before

@Before,@Test之前执行,一般用于准备一些资源。

代码示例:

public class Demo1Test {Demo1 demo1;@Beforepublic void before(){demo1=new Demo1();}@Testpublic void testSum(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}
}

3.3.@After

@After,@Test之后执行,一般用于释放一些资源。

代码示例:

public class Demo1Test {Demo1 demo1;@Beforepublic void before(){demo1=new Demo1();}@Testpublic void testSum(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}@Afterpublic void after(){System.out.println("测试结束!");}
}

3.4.@BeforeClass

@BeforeClass,作用于类层面,修饰静态方法,整个类的生命周期中,只在类的生命周期开始的时候执行一次。

一般用于准备一些所有用例共享的资源。

代码示例:

public class Demo1Test {Demo1 demo1;@BeforeClasspublic static void beforeClass(){System.out.println("beforeClass......");}public Demo1Test(){System.out.println("建立测试用例!");}@Beforepublic void before(){System.out.println("测试开始!");demo1=new Demo1();}@Testpublic void testSum1(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}@Testpublic void testSum2(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}@Afterpublic void after(){System.out.println("测试结束!");}
}

运行结果:

3.5.@AfterClass

@AfterClass,作用于类层面,修饰静态方法,整个类的生命周期中,只在类的生命周期结束的时候执行一次。

一般用于销毁一些所有用例共享的资源。

代码示例:

public class Demo1Test {Demo1 demo1;@BeforeClasspublic static void beforeClass(){System.out.println("beforeClass......");}public Demo1Test(){System.out.println("建立测试用例!");}@Beforepublic void before(){System.out.println("测试开始!");demo1=new Demo1();}@Testpublic void testSum1(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}@Testpublic void testSum2(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}@Afterpublic void after(){System.out.println("测试结束!");}@AfterClasspublic static void afterClass(){System.out.println("afterClass......");}
}

运行结果:

4.异常测试

通过@Test注解的expected属性可以断定该TestCase抛出的异常,抛出不匹配的异常会报错。

代码示例:

@Test(expected = NumberFormatException.class)public void testNumberFormat(){Integer.parseInt(null);}

5.超时测试

通过@Test注解的timeout属性可以设置每个TestCase执行耗时的时间阈值,超时会报错。

代码示例:

@Test(timeout = 3000)public void testNumberFormat(){try {Thread.sleep(4000);} catch (InterruptedException e) {e.printStackTrace();}}

6.参数化测试

Junit提供了输入一组参数进行测试的机制。

代码示例:

@RunWith(Parameterized.class)
public class ParameterTest {//用于准备一组数据的方法//方法严格约定为 public Collection<?> data()@Parameterized.Parameterspublic static Collection<?> data(){return Arrays.asList(new Object[][]{{0,0},{1,1},{-1,1}});}int input;int expected;//准备好的数据会在构造方法中自动传递过来public ParameterTest(int input,int expected){this.input=input;this.expected=expected;}@Testpublic void testAbs(){int r=Math.abs(this.input);Assert.assertEquals(this.expected,r);}
}

 

 

http://www.lryc.cn/news/131673.html

相关文章:

  • Nginx的安装及负载均衡搭建
  • JVM学习笔记(一)
  • fastjson 序列化问题:Comparison method violates its general contract
  • Angular安全专辑之二——‘unsafe-eval’不是以下内容安全策略中允许的脚本源
  • 十一、Linux用户及用户组的权限信息如何查看?如何修改?什么是权限的数字序号?
  • ahooks.js:一款强大的React Hooks库及其API使用教程(二)
  • ARM 配置晶振频率
  • 最强自动化测试框架Playwright(37)-网络
  • Ant Design Pro 前端脚手架 配置混合导航
  • tcl学习之路(五)(Vivado时序约束)
  • Hlang-中英双语言编程语言使用手册
  • centos 7 安装docker
  • Spring环境搭建、SpringIOC容器基础、SpringDI基础
  • CentOS7.9手工配置静态网络流程
  • JVM面试题-1
  • 漫谈红黑树:红黑树的奇妙演化
  • docker启动rabbitmq,但是页面加载不出来问题解决
  • Qt项目报错:Cannot run compiler ‘clang++‘. /bin/sh: 1: clang++: not found
  • 奇舞周刊第503期:图解串一串 webpack 的历史和核心功能
  • 6.redis面试题和坑
  • 【ES6】—使用 const 声明
  • iOS开发 - Swift Codable协议实战:快速、简单、高效地完成JSON和Model转换!
  • RabbitMq:Topic exchange(主题交换机)的理解和使用
  • 汽车级36V、4A同步降压转换器MAX20404AFOD/VY、MAX20404AFOC/VY、MAX20404AFOA/VY开关稳压器
  • C++------利用C++实现二叉搜索树【数据结构】
  • HotSpot虚拟机之内存模型与线程安全
  • TiDB 多集群告警监控-中章-融合多集群 Grafana
  • 【图像分类】基于卷积神经网络和主动学习的高光谱图像分类(Matlab代码实现)
  • notepad++ verilog关键字自动补全
  • C语言知识