IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Java单元测试 -> 正文阅读

[开发测试]Java单元测试

一、单元测试框架简介

Mockito是一个Mock框架,也是Java中使用比较广泛的一个Mock框架。关于Mock的概念,其实很简单:所谓的mock就是创建一个类的虚假的对象,在测试环境中,用来替换掉真实的对象,以达到以下目的:

  1. 验证这个对象的某些方法的调用情况,调用了多少次,参数是什么等等;
  2. 指定这个对象的某些方法的行为,返回特定的值,或者是执行特定的动作,而不用像AndroidTest那样必须在Android模拟器或物理机上进行测试;

而PowerMockito是对Mockito的增强,对于Mocktio不能Mock的对象或者方法,我们可以使用PowerMock来实现。比如Mockito不能用于static method, final method, 枚举类, private method,这些我们都可以用PowerMockito来实现。

二、命名规范

项目通用规范
{className}Test
方法test_{methodName}_should_{expection}_when_{condition}

三、测试结构

注解说明
@RunWith为测试类指定测试执行器
@PrepareForTest修改指定类的字节码
@BeforeClass在所有测试用例执行之前执行一次
@AfterClass在所有测试用例执行之后执行一次
@Before在每个测试用例执行之前执行一次
@After在每个测试用例执行之后执行一次
@Test执行测试用例

四、断言的使用

断言说明
Assert.assertEquals(Object expected, Object actual)断言两个对象相等
Assert.assertTrue(boolean condition)断言condition为true
Assert.assertFalse(boolean condition)断言condition为false
Assert.assertNull(Object object)断言对象为null
Assert.assertNotNull(Object object)断言对象不为null

五、常见写法

1、对类进行mock

// 对普通类进行mock
ClassName object = PowerMockito.mock(ClassName.class);

// 对含有静态方法的类进行mock
PowerMockito.mockStatic(ClassName.class);

2、对构造方法进行mock

ClassName object = PowerMockito.mock(ClassName.class);
PowerMockito.whenNew(ClassName.class).withArguments(arguments).thenReturn(object);

注意:

(1)此时需要在测试类的@PrepareForTest中加入ClassName.class,否则上述mock不会生效;

(2)withArguments可以替换成withNoArguments或者withAnyArguments,视具体情况而定。

3、对有返回值的public成员方法进行mock

// 对普通成员方法进行mock
ClassName object = PowerMockito.mock(ClassName.class);
PowerMockito.when(object.publicMemberMethod()).thenReturn(expectedValue);

// 对静态成员方法进行mock
PowerMockitoStatic(ClassName.class);
PowerMockito.when(ClassName.publicMemberMethod()).thenReturn(expectedValue);

注意:对静态成员方法进行mock时需要在测试类的@PrepareForTest中加入ClassName.class,否则上述mock不会生效。

4、跳过有返回值的成员方法(public或者private)

Stubber.stubMethod(ClassName.class, "memberMethodName", expectedValue);

5、跳过无返回值的public成员方法

// 跳过普通无返回值public成员方法
ClassName object = PowerMockito.mock(ClassName.class);
PowerMockito.doNothing().when(object).publicMemberMethod(arguments);

// 跳过静态无返回值public成员方法方式一
PowerMockito.mockStatic(ClassName.class);
PowerMockito.doNothing().when(ClassName.class, "publicMemberMethodName", arguments...);
// 跳过静态无返回值public成员方法方式二
PowerMockito.suppress(PowerMockito.method(ClassName.class, "publicMemberMethodName", argumentsType.class...));

注意:

(1)跳过静态无返回值的public成员方法时需要在测试类的@PrepareForTest中加入ClassName.class,否则上述mock不会生效。

(2)跳过静态无返回值public成员方法时如果是无参数的,那么方式一的arguments...和方式二的argument.class无需传入。

6、没有set方法的情况下设置私有成员变量的值

ClassName object = PowerMockito.mock(ClassName.class);
Whitebox.setInternalState(object, "privateMemberVariableName", expectedValue);

7、没有get方法的情况下获取私有成员变量的值

ClassName object = PowerMockito.mock(ClassName.class);
Whitebox.getInternalState(object, "privateMemberVariableName");

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:30:16  更:2021-12-26 22:30:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:16:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码