SpringBootTest测试框架一

为了方便开发,对数据进行mock处理,形成文件,只修改文件内容达到mock指定数据的目的

1、定义测试模式

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface TestModel {TestModelEnum value() default TestModelEnum.LOCAL_PRIOR;String[] mockMethodNames() default {};
}public enum TestModelEnum {/*** 读取本地数据,若无则抛异常*/LOCAL,REMOTE,/*** 本地优先,若本地无mock数据则调用远端并保存到本地*/LOCAL_PRIOR,
}

注入拦截器

public class TestBean {public static final String mockMethods = "mockMethods";// feign拦截器,为了mock feign返回值@Beanpublic Feign.Builder feignBuilder() {return Feign.builder().invocationHandlerFactory((target, dispatch) -> new FeignResultInvocationHandler(target, dispatch));}// sql拦截器,为了mock 查询sql返回值@Beanpublic SqlResultInterceptor sqlResultInterceptor() {return new SqlResultInterceptor();}
}

启动测试父类

StartApplication 为springboot的启动类,可自定义测试启动类也可直接复用项目启动类

@SpringBootTest(classes = {StartApplication.class, TestBean.class})
public abstract class AbstractBasicTest {public final Logger logger = LoggerFactory.getLogger(getClass());// 方法启动时初始化执行方法,可指定db等@Beforepublic void before() {logger.info("before ==================================init datasource====");}// 方法结束时执行方法,清除变量@Afterpublic void tearDown() {// 清理环境变量,恢复测试环境System.clearProperty("classPath");System.clearProperty("classMethodName");System.clearProperty("className");System.clearProperty("testModel");System.clearProperty(TestBean.mockMethods);}// 每个测试方法执行前初始化方法,赋值变量值@BeforeEachpublic void initService(TestInfo testInfo) throws Exception {Method method = testInfo.getTestMethod().get();String methodName = method.getName();String className = testInfo.getTestClass().get

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/17125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字水印 | 离散余弦变换 DCT 基本原理及 Python 代码实现

目录 1 基本原理2 代码实现3 图像压缩 1 基本原理 参考博客:https://www.cnblogs.com/zxporz/p/16072580.html D C T \mathsf{DCT} DCT 全称为 D i s c r e t e C o s i n e T r a n s f o r m \mathsf{Discrete\ Cosine\ Transform} Discrete Cosine Transfo…

新购入的读码器该如何测试呢?

物联网技术的飞速发展,条码二维码作为一种高效、便捷的数据传输方式,已经广泛应用于仓储、物流配送、零售与结算、MES系统等生活和工业领域。新购的条码二维码读码器,在使用前要了解它的使用方法和性能,以确保其性能稳定、读取准确…

小预算大效果:揭秘品牌如何用创新方法实现低成本传播

说到品牌,我们都知道,没钱是真的难搞。 品牌建设就像跑马拉松,得慢慢来,持续投入,一点一滴积累声誉,这样才能培养出忠实的粉丝团。 但别急,就算资金紧张,我们也有办法让品牌慢慢站…

基于飞书机器人跨账号消息提醒

事情的起因是飞书中不同的账号不能同时登录,虽然可以在飞书的账号切换页面看到其他账号下是否有消息提醒(小红点),但是无法实现提醒功能,很不优雅,因此本文尝试提出一种新的方式实现不同账号之间的提醒功能…

自定义CSS属性(@property)解决自定义CSS变量无法实现过渡效果的问题

且看下面的代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>demot</title&g…

云原生架构产生背景

1.云原生的概念 “云原生”来自于Cloud Native的直译&#xff0c;拆开来看&#xff0c;Cloud就是指其应用软件是在云端而非传统的数据中心。Naive代表应用软件从一开始就是基于云环境、专门为云端特性而设计&#xff0c;可充分利用和发挥云平台的弹性分布式优势&#xff0c;最…

内存泄漏案例分享2-Fragment的内存泄漏

案例2——hprof文件显示出Fragment内存泄漏 接下来我们来看fragment内存泄漏&#xff0c;老规矩查看fields和references&#xff0c;确保它符合内存泄漏的情形&#xff1b;我们点击jump to source查看泄漏的位置 Fragment#MZBannerView#内部类Runnbale /*** Banner 切换时间间…

【Unity AR开发插件】如何快速地开发可热更的AR应用

预告 本专栏将介绍如何使用这个支持热更的AR开发插件&#xff0c;快速地开发AR应用。 Unity AR开发插件使用教程 更新 二、使用插件一键安装HybridCLR和ARCore 三、配置带HybridCLR的ARCore开发环境 四、制作热更数据-AR图片识别场景

StringBufferInputStream类,你学会了吗?

在Java编程中,处理字符串数据流是一项常见的任务。 为了更灵活地处理字符串数据流,Java提供了StringBufferInputStream类,它允许将字符串转换为输入流,从而可以像处理其他输入流一样对字符串进行操作。 本文将深入探讨StringBufferInputStream类的背景、用法、优缺点以及…

RocketMQ如何保证消息不丢失

同步发送消息&#xff0c;那为什么还会有异步&#xff0c;因为异步发送效率高。 存储消息 通过配置持久化策略。 存储消息的过程&#xff0c;先存到内存page cache&#xff0c;再持久化到磁盘&#xff0c;默认配置是直接到内存后就返回成功了,但是如果这时候机器断电了,就会丢…

父进程等待子进程退出

一、 为什么要等待子进程退出&#xff1f; 等待子进程退出是为了确保父进程能够在子进程执行完毕后继续执行或者处理子进程的结果。在许多情况下&#xff0c;父进程需要等待子进程完成后才能继续执行&#xff0c;以确保正确的执行顺序和结果。 以下是一些等待子进程退出的主要…

2024年,游戏行业还值得进入吗?

来自知乎问题“2024年&#xff0c;游戏行业还值得进入吗&#xff1f;”的回答。 ——原问题描述&#xff1a;从超小厂执行策划做起&#xff0c;未来有前途吗&#xff1f; 展望2024年&#xff0c;国内外的游戏市场环境或将变得更加复杂&#xff0c;曾经那个水大鱼大的时代过去了…

工智能在脉搏分析中的matlab应用

人工智能&#xff08;AI&#xff09;在脉搏分析中的应用可以通过多种方法实现&#xff0c;包括使用机器学习算法对脉搏信号进行分类、预测或异常检测。MATLAB是一个强大的平台&#xff0c;它提供了各种工具和功能来处理和分析这样的信号。以下是一个简化的步骤&#xff0c;说明…

RocketMQ如何保证顺序消费

为什么会有顺序消费的需求&#xff1f; 业务场景需要&#xff0c;比如一个订单的流程&#xff0c;从创建到支付到发货到评价&#xff0c;需要按照顺序进行。 有可能会有网络波动。 topic可能分为多个queue&#xff0c;那queue的分配是随机的&#xff0c;不同queue之间的消费速…

出现 PermissionError: [Errno 13] Permission denied: ‘/Data‘ 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 执行某个项目的时候,出现如下问题 File "/home/l228/huoyanhao/pytorch-glow-master/pytorch-glow-master/misc/util.py", line 179, in create_result_subdiros.makedirs(result_subdir)File "/home/l228…

C++: 二叉搜索树及实现

目录 一、二叉搜索树的概念 二、二叉搜索树的操作 2.1插入 2.2删除 1.有左子树&#xff0c;无右子树 2.有右子树&#xff0c;无左子树 3.有左子树和右子树 三、二叉搜索树的实现 要点 前言&#xff1a;为了学习map和set&#xff0c;需要先学二叉搜索树作为铺垫。 一、…

基于51单片机的函数发生器设计

一.硬件方案 此函数信号发生器是基于单片机AT89C51设计而成的&#xff0c;能够产生频率范围在0Hz—535Hz的锯齿波、正弦波、三角波、矩形波四种波形&#xff0c;并且能够通过液晶屏1602显示各自的波形类型以及频率数值。电路主要由51单片机最小系统DA0832模数转换模块运放模块…

AI代理的类型、优势及示例

AI 代理的类型、优势和示例 AI 代理是重塑商业动态的关键技术进步。了解这些代理的运作方式&#xff0c;发现它们的关键优势包括效率、可扩展性和成本效益。我们将探索代理的实例及它们在各领域的应用&#xff0c;为未来的人工智能趋势和对客户体验的影响铺平道路。 想象一支由…

`“use strict“`在JavaScript中是什么?它背后的原理是什么?

JavaScript的严格模式(strict mode)是ECMAScript 5引入的一项特性。如果你在脚本或函数的顶部声明 use strict;,你就启用了严格模式: use strict;当JavaScript引擎看到这个指令时,它将开始以一种特殊的模式解释代码。在这种模式下,当检测到某些可能导致潜在错误的编码实…

多重继承引起的二义性问题和虚基类

多重继承容易引起的问题就是因为继承的成员同名而产生的二义性问题。 例&#xff1a;类A和类B中都有成员函数display和数据成员a,类C是类A和类B的直接派生类 情况一&#xff1a; class A {public:int a;void display(); }; class B {public:int a;void display; }; class C:…