业务场景描述:盘库操作中需要使用具备有效期限的动态码登录系统,接下来是结合 动态码更新API 的单元测试,讲解Assertions 的常规用法。

项目采用 Spring Boot + Gradle 集成,下面使用gradle 语法引入依赖:

testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '2.1.2.RELEASE'testCompile group: 'org.assertj', name: 'assertj-core', version: '3.11.1'

Jar依赖可访问  maven repository   查找和选取。点击 Jar 依赖查找明细,可看到其支持多种集成工具,如maven,gradle,ant等

import com.fasterxml.jackson.databind.JsonNode;
import org.assertj.core.api.Assertions;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.transaction.annotation.Transactional;import static net.javacrumbs.jsonunit.fluent.JsonFluentAssert.assertThatJson;/*** @Description 更新动态码* @Author blake* @Date 2019-01-22 11:32* @Version 1.0*/
@RunWith(SpringRunner.class)
@WebAppConfiguration
@SpringBootTest
@Transactional
@Sql("classpath:/sql/admin/dynamicCode/updateDynamicCodeTests.sql")
public class UpdateDynamicCodeTests extends BaseDynamicCodeControllerTests {@Autowiredprivate DynamicCodeService dynamicCodeService;/*** 动态码更新-正常态*/@Testpublic void updateDynamicCodeSuccessfully() throws Exception {Long id = LongUtil.toLong(1);// 更新前的动态码信息DynamicCodeResponse originalDynamicCode = dynamicCodeService.getDynamicCodeInfo(id);String responseContent = mMockMvc.perform(MockMvcRequestBuilders.put(BASE_HOST + "/api/admin/dynamic/code/" + id).contentType(MediaType.APPLICATION_JSON_UTF8).sessionAttr(AUTHORIZED_ATTRIBUTE_NAME, getAuthSession())).andExpect(MockMvcResultMatchers.status().isOk()).andDo(MockMvcResultHandlers.print()).andReturn().getResponse().getContentAsString();prettyPrintJson(responseContent);//assert  responseJsonNode jsonNode = mObjectMapper.readTree(responseContent);// 更新成功后的动态码信息DynamicCodeResponse dynamicCode = jsonNode.get("data").traverse(mObjectMapper).readValueAs(DynamicCodeResponse.class);assertThatJson(responseContent).node("code").isEqualTo(0);assertThatJson(responseContent).node("data").isNotEqualTo(null);assertThatJson(responseContent).node("message").isEqualTo("");assertThatJson(responseContent).node("status").isStringEqualTo("success");Assertions.assertThat(originalDynamicCode).isNotEqualTo(null);Assertions.assertThat(dynamicCode).isNotEqualTo(originalDynamicCode);Assertions.assertThat(dynamicCode.getActive()).isEqualTo(originalDynamicCode.getActive());Assertions.assertThat(dynamicCode.getPlanId()).isEqualTo(originalDynamicCode.getPlanId());Assertions.assertThat(dynamicCode.getCode()).isNotEqualTo(originalDynamicCode.getCode());Assertions.assertThat(dynamicCode.getIsSub()).isEqualTo(originalDynamicCode.getIsSub());Assertions.assertThat(dynamicCode.getId()).isEqualTo(originalDynamicCode.getId());}}

接下来解释下测试类上标注的5个注解的作用:

  1. @RunWith(SpringRunner.class)   表明单元测试运行借助于SpringRunner 驱动器
  2. @WebAppConfiguration  表明这是一个Web类型的单元测试,即Controller级别的Tests
  3. @SpringBootTest  表明这是一个Spring Boot 项目的单元测试
  4. @Transactional  事务回滚
  5. @Sql("classpath:/sql/admin/dynamicCode/updateDynamicCodeTests.sql")   单元测试的数据准备,建议每个table的insert操作前,都使用 truncate table tableName; 将数据清空,以免发生主键冲突等状况。建议连接本地MySQL数据库进行单元测试!

单元测试Junit Test 中 Assertions 使用 Java版相关推荐

  1. Java利用二维数组判断节假日_《剑指offer》面试题3 二维数组中的查找 Java版

    (二维数组,每行递增,每列递增.输入二维数组和一个整数,判断数组中是否含有此数.) 我的方法:拿到题目,根据题目条件我提取出这样一个特性:一个数的右边和下面的数都比它大.于是就可以写出一种递归的方法: ...

  2. 单元测试Junit 测试类与测试方法 java

    测试工具的使用 定义了一个普通类 添加修饰符 添加JUnit4 效果 运行测试方法 运行结果 继续演练 新建另一个方法 全部方法运行 通过断言判断程译的对错 Assert断言 引入类 使用方法 报错的 ...

  3. java版溺尸掉三叉戟吗_我的世界:得不到溺尸的三叉戟怎么办?概率太低,版本要求不同!...

    在沙盒游戏我的世界中,三叉戟是海洋版本所添加的一个装备,可附魔,使其成为近战和远攻"两用"武器.可惜的是玩家们想要得到溺尸手中的三叉戟居然这么困难,有的玩家辛辛苦苦地击杀一两百个溺 ...

  4. 我的世界java服核心下载_我的世界java版服务器

    我的世界java版服务器是由网易推出全自由的一款游戏,自由化的模式保证你可以在这里创建你喜欢的所有物品,多种玩法设计,而且还有大量的挑战等你来体验,在这个充满乐趣的世界当中,不断的完成你的冒险,享受有 ...

  5. java中junit_【Java】Junit快速入门

    Junit介绍 JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个. JUnit ...

  6. Java单元测试(Junit+Mock+代码覆盖率)

    单元测试是编写测试代码,用来检测特定的.明确的.细颗粒的功能.单元测试并不一定保证程序功能是正确的,更不保证整体业务是准备的. 单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代码修复.改进 ...

  7. 在Java版中被移除的物品,盘点Minecraft曾“移除”的5个物品,Mojang反悔?1.14即将加入!...

    讲台是<我的世界>非常老的一个开发计划,2012年Dinnerbone就表示,非常喜欢讲台这个设计,玩家可以在讲台上阅读和书写.2013年Dinnerbone打算重启讲台计划,但却没有成功 ...

  8. 线索二叉树原理及前序、中序线索化(Java版)

    转载 原文地址:https://blog.csdn.net/UncleMing5371/article/details/54176252 一.线索二叉树原理 前面介绍二叉树原理及特殊二叉树文章中提到, ...

  9. [科幻]Java版三体中黑暗森林法则的猜想

    这两天去电影院看了<星际穿越>,作为大刘的磁铁发现里面有许多元素和<三体>近乎一样,只是小说文字被好莱坞完美视觉化了,很怀疑导演诺兰在拍这部片子之前是否看过了<三体> ...

最新文章

  1. 360浏览器登录_360浏览器登录统一操作系统UOS国产CPU首次实现高清视频在线播放...
  2. Http Hijacker
  3. arduino定时器控制舵机_Arduino学习经验(一)之解决舵机库和pwm输出冲突
  4. c++对象的内存布局2--进阶篇---C++ 对象的内存布局(上)
  5. .SQL Server中 image类型数据的比较
  6. PHP_Smarty
  7. MySQL特有的SQL语句 第一弹
  8. TFS无法连接:TF31002
  9. 象棋名手手机版2019最新版_象棋名手
  10. PCB工程师为你详解FPC排线及其用途
  11. 三角形的内切圆和外接圆半径公式
  12. springcloud Netflix
  13. SQL经典50查询语句案例_5(查询没学过“叶平”老师课的同学的学号、姓名)
  14. alertmanager集群搭建
  15. 营业执照、组织机构代码、税务登记号规则
  16. vue vue-quill-editor 富文本 改变图片大小
  17. Mark(转载)古人读书十二法
  18. PANDA pipeline的安装与使用-安装(1)
  19. Flutter 打开外部第三方应用
  20. e4a数据库mysql中间件_[e4a同步内陆数据库至mysql]?确立一个中间件毗邻数据库

热门文章

  1. 2021高考成绩23号几点可以查询,2021年广西高考成绩23号几点可以查询,今天几点出高考成绩...
  2. 打开此电脑一直在读条简单粗暴的解决方法亲测有效!!!
  3. 店铺中货架的装修设计要点
  4. 如何管理比自己技术还要强的下属?
  5. android studio 提示ABIs [arm64-v8a,armeabi-v7a,armeabi] set by ‘android.injected.build.abi’ gradle fla
  6. Cookie实现浏览记录
  7. Oracle使用文档
  8. 8732_sobs request failed
  9. 【python学习】-多张三维图共用一个colorbar(matplotlib绘制)
  10. 使用JQuery修改Table特定行的相关属性