使用anntest进行基于数据库的单元测试

介绍:

 

Anntest是一个基于Spring-test扩展的数据库测试框架,通过annotation在测试前进行数据准备。
 

背景:

 

数据库相关的单元测试一直是单元测试中最令人头疼的问题,虽然dbunit在这一领域已经比较强大,但是依然有很多的缺陷。

 

1、数据的准备繁琐

 

无论是xml、xls、cvs还是sql,准备数据起来都不尽如人意

 

2、数据文件的维护量大

 

当数据库结构发生变化时,所有的数据文件都需要修改,如果没有修改,相关的测试就报错,当单元测试的错误越来越多时,开发人员就基本没有兴趣去维护这些测试了

 

3、在单元测试的代码中需要去写数据准备的代码

 

我很讨厌写这些代码,我只想测试我写的类而已

 

 

anntest 或许可以帮助你

 

 

anntest特点:

 

1、注释式配置数据(代码侵入性小)

 

2、数据配置集中化(数据库结构改了可以只改这里)

 

3、列准备数据(1000条数据只用一条注释)

 

4、可以对每个测试个性化自己需要的数据

 

5、多数据源支持,可以给几个不同的数据库同时准备

 

6、基于Spring-test ,Spring-test的东西都可以用

 

7、多种类型数据库支持

 

8、多样化的字段数据类型配置

 

 

anntest使用:

0、建一个给单元测试使用的数据库

        数据库的结构和开发库相同,在spring数据源的配置中使用这个库

 

1、引入jar

 

Spring2.5:

<dependency>
       <groupId>com.taobao.anntest</groupId>
       <artifactId>anntest-spring2</artifactId>
       <version>1.4.0-SNAPSHOT</version>
</dependency>

 

Spring3.0:

<dependency>
       <groupId>com.taobao.anntest</groupId>
       <artifactId>anntest-spring3</artifactId>
       <version>1.4.0-SNAPSHOT</version>
</dependency>

 

2、表配置文件 (已经不建议使用)

 

 

  • NULL:null
  • BLANK:空字符
  • VARCHAR:字符串类型
  • NUMBER:数字类型
  • SYSDATE: 当前日期(只有年月日)

可以使用 value="yyyy-MM-dd" 指定固定日期

  • SYSTIME: 当前时间

可以使用  value="yyyy-MM-dd HH:mm:ss" 指定固定时间

 

 

关于increase的说明:

 

适用于VARCHAR 、NUMBER、SYSDATE、SYSTIME类型

 

3、准备测试的基础类

 

@RunWith(AnnSpringJUnit4ClassRunner.class)  
@ContextConfiguration(locations={
	"classpath:/springbeans-data-source-test.xml",
	"classpath:/springbeans-rpt-ds-test.xml",
	"classpath:/springbeans-web-bo.xml"
	})
@TransactionConfiguration(transactionManager="txManager",defaultRollback=true)
@Transactional
public abstract class BaseTestCase{

}

 

就 @RunWith(AnnSpringJUnit4ClassRunner.class) 不一样,其他和Spring-test的都一样

 

4、开始测试啦

 

(1)单表数据准备

 

	@Test
	@DataSet(tbName="z_member",number=10)
	public void testGetMemberById(){
		MemberDO memberDO = memberBO.getMemberById(99999901L);
		assertEquals(99999901L,memberDO.getMemberid().longValue());
		assertEquals("测试用户1",memberDO.getNickname());
	}

 

 (2)多个表

	@Test
	@DataSets({
		@DataSet(tbName="z_member",number=10),
		@DataSet(tbName="z_config",number=1)
		})

 (3)不同库的两个表

 

	@Test
	@DataSets({
		@DataSet(tbName="z_member",number=10),
		@DataSet(tbName="rpt_z_cpmprice",number=5,dataSource="dataSourceSds")
		})

   anntest默认的数据源是spring配置的第一个dataSource

 

 (4)自定义数据 (已经不建议使用,可以使用 9 的功能进行替代)

 

	@Test
	@DataSets({
		@DataSet(tbName="z_member",number=10),
		@DataSet(tbName="z_config",
				customColumns={"configkey","configvalue"},
				customRows={
					@CustomRow({"TEST_KEY","hello world"}),
					@CustomRow({"CONTRACT_VERSION_KEY","2"})
				})
		})



注:定义了自定义列之后,number属性将无效,数据行数为自定义数据的行数

 

(5)自定义列(覆盖配置文件的列定义)(1.1.0新功能)(已经不建议使用)

 

	@Test
	@DataSet(tbName="CPX_CAMP_DETAIL_ADBOARD",number=3,columns={
			@Column(name="ADID",valueType=ColumnType.NUMBER,value="99999901")
	})

  

  (6) 自定义数据 (推荐使用)

 

@Test
    @DataSet(tbName="iface",number=16,
        custom="age={3,4,7};" +             //表示数组,第一条=3,第2条=4,…
                "name=dcross^2;" +          // ^表示递增,2表示步长
                "nick=nickname^;" +         //表示递增,步长为1
                "money=2.45;" +             //全部用这个值
                "the_datetime=FUNC{now()}")     //用函数

 

 如果需要准备的数据中有 = ; , ^ 特殊字符,使用 \\=  \\; 转义

 

(7)使用csv格式的自定义数据

 

1、指定csv文件的文件名:

 

 

	@Test
	@DataSet(tbName="SIZE_INFO",dataFile="size_info.csv")

 

 

文件如下:

注:不需要定义所有的列,只需要定义个性化的列,其他的列会取配置里的默认数据

定义了自定义列之后,number属性将无效,数据行数为自定义数据的行数

 

 

 

anntest会在当前目录查找这个文件

 

 

2、如果是公用的数据,可以在测试的根目录下新建anntest-data目录,将csv文件放在这里,在测试中按照如下方式指定:

 

 

	@Test
	@DataSet(tbName="DICT",dataFile="dict.csv")

 

anntest数据的优先级:

 

1、当前目录下指定文件

2、anntest-data目录下指定文件

如果加载到,后面的将被忽略

 

 

(8)清除数据

	@Test
	@DataSet(tbName="CPX_CAMP_DETAIL_ADBOARD",number=0)

 

 

国央企创新负责人如何通过平台实现科技成果的定向匹配与快速转化?.docx 科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。 立即下载

相关推荐

端口测试软件Windows

端口测试软件Windows

人工神经网络-在ANN上测试你的技能的25个问题

介绍人工神经网络是受人类神经元工作启发的计算系统。它是深度学习的支柱,在几乎所有领域取得了更大的里程碑,从而带来了我们解决问题的进化。因此,每个有抱负的数据科学家和机器学习工程师都必须对这...

深度学习与计算机视觉 980

两相交错并联Boost电路仿真模型(Simulink仿真实现)

内容概要:本文详细介绍了两相交错并联Boost电路的Simulink仿真模型,属于电力电子变换器领域的核心技术研究。该模型基于Simulink平台构建,重点在于通过多相交错并联结构提升Boost电路的输出稳定性与转换效率,有效降低输入电流纹波,适用于中高功率电力变换场合。文档系统阐述了电路的工作原理、闭环控制策略设计、软启动机制实现以及关键参数的优化方法,充分展现了多相并联技术在改善动态响应、提高功率密度方面的优势。同时,提供了完整的仿真建模流程和技术路线,涵盖主电路搭建、控制器设计、系统调试与性能分析等环节,并配套提供仿真文件、设计报告及参考文献等丰富资料,便于学习者深入理解与实践复现。; 适合人群:具备电力电子技术基础知识、熟悉Simulink仿真环境,正在从事新能源发电、电动汽车、工业电源系统等相关领域研究的硕士博士研究生、科研人员及电气工程方向的工程技术人员。; 使用场景及目标:①用于深入理解多相交错并联Boost电路的拓扑结构与工作机理;②支撑科研项目中的高效DC-DC变换器性能验证与优化设计;③为实际电源产品开发提供理论依据和仿真原型;④作为高校课程设计或实验教学的参考案例,提升学生的工程仿真与系统分析能力。; 阅读建议:建议结合文档中提及的其他相关变换器模型(如LLC谐振变换器、PFC电路、Buck变换器等)进行横向对比学习,深入掌握不同拓扑的控制策略差异与适用场景,并充分利用所提供的网盘资源下载完整仿真模型,动手调试参数、观察波形,从而深化对多相并联控制、电流均流、闭环稳定性等关键技术的理解,全面提升电力电子系统的仿真与设计能力。

TestNG中的数据源DataProvider概述

在上一篇文章中,我们知道带参数的测试方法,可以在testng.xml配置文件中为其参数赋值。但是那只适用于初始值简单且确切的情况。 对于初始值是复杂的对象,或者初始值是执行过程中生成的情况,就只能使用这里的数据源@DataProvider。 使用TestNG中的数据源@DataProvider,所有的工作都在测试类中完成。具体过程分为两个步骤,第一步是定义数据源,第二步是在测试方法中引用数据源

成长的足迹 8403

夜晚监控场景下老鼠检测数据集VOC+YOLO格式3961张1类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

电动车检测数据集VOC+YOLO格式3015张1类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

XLSUnit,面向数据库的单元测试工具

为什么80%的码农都做不了架构师?>>> ...

weixin_33997389的博客 352

无人机视角建筑物楼房外立面缺陷剥落裂缝检测数据集VOC+YOLO格式1263张2类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

anntest 1.1.0 发布

anntest 1.1.0 发布啦!   主要升级功能:   1、csv格式的行数据准备 2、表配置文件的优化 3、数据准备阶段的错误信息可以出现在junit的错误信息中了 4、自定义列的配置 5、删除了原来对jdom的依赖 6、日期时间支持递增   详细的使用说明请到这里:http://dcross.iteye.com/blog/1195310...

lost in city 162

银河麒麟桌面操作系统V10(SP1)ssh服务安装与配置

在国产化的大背景下,各种国产操作系统逐步进入运维人员的视野,ssh作为linux远程连接工具,是运维人员必需的工具之一。本文主要介绍在银河麒麟桌面操作系统V10(SP1)上安装和配置ssh服务。

zhengshaolin128的博客 7811

Windows下RISC-V开发环境搭建:xpack-riscv-none-elf-gcc安装配置全攻略

本文详细介绍了在Windows平台下搭建RISC-V开发环境的完整流程,重点讲解xpack-riscv-none-elf-gcc工具链的安装配置方法。从环境变量设置到VSCode集成开发环境搭建,涵盖汇编程序和C程序开发实践,为开发者提供一站式解决方案,助力快速掌握RISC-V架构开发技能。

weixin_26765287的博客 438

数据库程序的单元测试

数据库程序的单元测试翻译:Xu NingNing    这些笔录是我关于已完成的数据库功能测试的一些心得。其中的例子是用java语言编写的,但我认为这些想法对于大多数编程环境都普遍适用。当然,我仍致力于寻找更佳的解决方案。  现实的问题是这样的:你有一个SQL数据库,一些存储过程和一个介于应用程序和数据库之间的中间层。你怎样在其中插入测试代码从而保证在数据库中数据存取功能的实现?一、 为什么会有这

emag_testage的专栏 3145

代付系统/代付系统源码/支付宝代付系统/API代付系统

简介: 其他站买的,没有做测试,源码是JAVA的,附带了安装文档,需要的拿无售后 源码下载地址https://www.skpan.cn/2QnIARSZDxG 代付系统/代付系统源码/支付宝代付系统/API代付系统 系统流程: 后台开通代理——开通商户——商户做代付(后台手工提交和 api 提交两种方式) 1、纯代付系统 2、支持个人支付宝全自动 3、支持单笔/批量/API接口方式代付 4、支持白名单、谷歌验证 5、收付款模式采用自动回调/自动转账 一、运营平台 商户管.

刀客源码网 5579

基于内存数据库的单元测试方法

一种基于内存数据库的单元测试方法一.问题提出二.环境准备三.使用步骤1.组件依赖2.项目结构3.各层代码4.h2测试代码5.运行结果四.总结说明 一.问题提出 很多朋友在软件开发过程中,需要尽快的知道自己开发的程序是否满足功能需要,通常通过自测的方法,能够验证程序的正确与否。在现代软件开发方法中,提倡在测试用例的开发要先于功能代码的开发,也称之为测试驱动开发。 但是在单元测试的实践中,通常需要验证...

tsxiong123的博客 1953

深度篇——图像处理的一些方法(一) 关于 图像处理的三个层次 与 selective search

返回主目录 返回 图像处理的一些方法 目录 下一章:深度篇——图像处理的一些方法(二)细说性能评估 IOU和 GIOU 目录内容 深度篇——图像处理的一些方法(一)关于图像处理的三个层次 与 selective search 深度篇——图像处理的一些方法(二)细说性能评估 IOU和 GIOU 深度篇——图像处理的一些方法(三)细说 HOG特征与bag-o...

天下所弃,不过其纪。世间事,在人,在志。 2917

Python爬虫实战:用Playwright+Transformer做财经新闻事件驱动分析,我靠它抓住了算力政策的涨停机会

对我来说,这套系统最大的价值不是抓住了几次涨停,而是把“看新闻→分析→决策”的全流程自动化、量化了——不用再被股吧的情绪带偏,不用再熬夜刷新闻,而是用数据和模型做理性判断。更重要的是,搭建这套系统的过程,我吃透了Playwright动态爬虫、Transformer文本分析、量化数据对接这些核心技能,这些技能不管是做量化、做数据分析师,还是做其他领域的爬虫,都能用得上。现在打开PyCharm,跟着代码跑一遍,你也能从海量财经新闻里,挖出属于自己的事件驱动信号——与其靠感觉炒股,不如靠数据说话。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1393

Junit-对涉及数据库操作的服务进行单元测试

之前一直不知道怎么通过单元测试,对涉及数据库操作的服务进行验证,现在了解了,做个记录。****************************************************************************************************************************对涉及数据库操作的服务进行单元测试时,需要在单元测试类里配置加载对...

tianjidudao的博客 1万+

海康VisionMaster与西门子Smart 200进行S7通信

海康VisionMaster与西门子Smart 200进行S7通信

haier123888的博客 8180

谈一下我们是怎么做数据库单元测试(Database Unit Test)的

&#13; 作者水平有限,如有错误或纰漏,请指出,谢谢。 背景介绍 最近在团队在做release之前的regression,把各个feature分支merge回master之后发现DB的单元测试出现了20多个失败的test cases。之前没怎么做过DB的单元测试,正好借这个机会熟悉一下写DB单元测试的流程。 这篇博文中首先介绍一下在我们的特定项目场景中是如何搭建DB 单元测...

HarlanC的专栏 1009

YOLOv11改进 | 细节涨点篇 | DySample一种最新的轻量化动态上采样算子(效果完爆CARAFE)

本文给大家带来的最新改进机制是一种号称超轻量级且有效的动态上采样器——DySample。与传统的基于内核的动态上采样器相比,DySample采用了一种基于点采样的方法,相比于以前的基于内核的动态上采样器,DySample具有更少的参数、浮点运算次数、GPU内存和延迟。此外,DySample在包括语义分割、目标检测、实例分割、全景分割和单目深度估计在内的五个预测任务中,性能均优于其他上采样器(截至目前最有效的上采样算子),

Snu77的博客 4212

A2B V1.0协议学习笔记(A2B System Specification V1.0)

A2B全称是 Automotive Audio Bus 汽车音频总线,主要是解决传统音频总线线多、线重、成本贵等问题。本文是以A2B V1.0规范为准,现在ADI又推出了A2B V2.0,物理层不兼容,采用了QPSK编码方式,后续有时间再更新。A2B总线的优点:支持1主多从的架构(最多10个子节点)支持50Mbps(具体是49.152 Mbps)的高带宽传输以及

qflook的博客 4428

小知识点系列-基于H2数据库单元测试

上面在定义H2数据库时指定了表结构的配置文件在ClassPath下的h2/sql/schema.sql下,通过schema我们定义我们DAO测试所需要的表结构,可以直接通过MySQL导出建表语句。

蒲春伟的博客 1090

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数据库编程(6)—— 测试(test层)设计

我们的所有的代码都已经编写完成了,那么,现在,本人来给出一个测试类,用于输出我们所编写的窗口: package com.mec.mis.test; import java.util.List; import com.mec.mis.model.SDMModel; import com.mec.util.ClassTableFactory; import com.mec.util.Databas...

Java我们右转见 311

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

给初学者们讲解人工神经网络(ANN)

1.介绍 这份教学包

日拱一卒 4万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限):

授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限):    mysql>grant all privileges on testDB.* to test@localhost identified by '1234'; 格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";

m15712884682的博客 2256
上一篇: 在使用guava时的纠结问题
下一篇: anntest 1.1.0 发布
dcross
博客等级 码龄24年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值