第五讲---单元测试与唯一键索引问题

单元测试与配置:

        在springboot中为什么可以用内存数据库h2代替真实数据库进行单元测试?

     这是因为,Spring Boot 支持多种外部配置方式,其中application-{profile}.properties和application.properties的优先级如下:

  1. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  2. jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  3. jar包外部的application.properties或application.yml(不带spring.profile)配置文件
  4. jar包内部的application.properties或application.yml(不带spring.profile)配置文件

    因此,我们在application-{profile}.properties中配置h2数据库,则单元测试的时候,可以指向优先调用h2数据库的数据。以下为application-{profile}.properties中的h2数据库配置:

#datasource
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:h2:mem:/**数据库名**/;MVCC=FALSE
spring.datasource.username=/**用户名**/
spring.datasource.password=/**密码**/
spring.datasource.driver-class-name=org.h2.Driver

    以下为application.properties中的数据库配置:

#datasource
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql:///**数据库IP:端口**///**数据库名**/?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&rewriteBatchedStatements=TRUE
spring.datasource.username=/**用户名**/
spring.datasource.password=/**密码**/
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

 

单元测试与唯一键索引:

    某次,博主在新建h2数据库之后,进行单元测试的过程中,发现报错如下:

Caused by: org.h2.jdbc.JdbcSQLException: Constraint "FID" already exists;

    但是博主找不出在h2库中建的表有什么问题,后来在同事的帮助下,找到了原因:原来h2数据库的建表规则与普通mysql数据库不一样,建表的唯一键索引名称不能一样,否则报唯一键索引重复:

-- ----------------------------
-- Table structure for `bill_import_info`
-- ----------------------------
CREATE TABLE `bill_import_info` (
  `tid` int(11) NOT NULL AUTO_INCREMENT,
  `fid` int(20) NOT NULL COMMENT '文件id',
  `parent_id` int(20) NOT NULL DEFAULT '0' COMMENT '父文件id',
  `file_name` varchar(20) NOT NULL DEFAULT '' COMMENT '文件名称',
  `md5_code` varchar(32) NOT NULL DEFAULT '' COMMENT 'MD5字段串',
  `status` char(2) NOT NULL DEFAULT '' COMMENT '文件转换状态(Y:成功,N:失败,P:正在执行)',
  `file_size` varchar(20) NOT NULL DEFAULT '' COMMENT '文件大小',
  `file_type` varchar(20) NOT NULL DEFAULT '' COMMENT '文件类型',
  `created_by` varchar(20) NOT NULL DEFAULT '' COMMENT '创建人',
  `date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`tid`),
  UNIQUE KEY `fid` (`fid`)
)
COMMENT='文件导入表'
AUTO_INCREMENT=76

;



-- ----------------------------
-- Table structure for `reconciliation_temporary_info`
-- ----------------------------
CREATE TABLE `reconciliation_temporary_info` (
  `tid` int(11) NOT NULL AUTO_INCREMENT,
  `fid` bigint(20) NOT NULL COMMENT '文件id',
  `file_name` varchar(100) NOT NULL DEFAULT '' COMMENT '文件名称',
  `file_path` varchar(300) NOT NULL DEFAULT '' COMMENT '文件路径',
  `file_size` varchar(20) NOT NULL DEFAULT '' COMMENT '文件大小',
  `status` char(2) NOT NULL DEFAULT '' COMMENT '导出状态(Y:成功,N:失败)',
  `date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '生成时间',
  `file_account_period` varchar(20) NOT NULL DEFAULT '' COMMENT '文件账期标识',
  `bill_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '文件账期',
  `customer_name` varchar(100) NOT NULL DEFAULT '' COMMENT '客户名称',
  PRIMARY KEY (`tid`),
  UNIQUE KEY `fid` (`fid`)
)
COMMENT='临时文件表'

;

    将两个表的唯一键名称改不一样之后,就可以了:

-- ----------------------------
-- Table structure for `bill_import_info`
-- ----------------------------
CREATE TABLE `bill_import_info` (
  `tid` int(11) NOT NULL AUTO_INCREMENT,
  `fid` int(20) NOT NULL COMMENT '文件id',
  `parent_id` int(20) NOT NULL DEFAULT '0' COMMENT '父文件id',
  `file_name` varchar(20) NOT NULL DEFAULT '' COMMENT '文件名称',
  `md5_code` varchar(32) NOT NULL DEFAULT '' COMMENT 'MD5字段串',
  `status` char(2) NOT NULL DEFAULT '' COMMENT '文件转换状态(Y:成功,N:失败,P:正在执行)',
  `file_size` varchar(20) NOT NULL DEFAULT '' COMMENT '文件大小',
  `file_type` varchar(20) NOT NULL DEFAULT '' COMMENT '文件类型',
  `created_by` varchar(20) NOT NULL DEFAULT '' COMMENT '创建人',
  `date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`tid`),
  UNIQUE KEY `idx_bii_fid` (`fid`)
)
COMMENT='文件导入表'
AUTO_INCREMENT=76

;



-- ----------------------------
-- Table structure for `reconciliation_temporary_info`
-- ----------------------------
CREATE TABLE `reconciliation_temporary_info` (
  `tid` int(11) NOT NULL AUTO_INCREMENT,
  `fid` bigint(20) NOT NULL COMMENT '文件id',
  `file_name` varchar(100) NOT NULL DEFAULT '' COMMENT '文件名称',
  `file_path` varchar(300) NOT NULL DEFAULT '' COMMENT '文件路径',
  `file_size` varchar(20) NOT NULL DEFAULT '' COMMENT '文件大小',
  `status` char(2) NOT NULL DEFAULT '' COMMENT '导出状态(Y:成功,N:失败)',
  `date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '生成时间',
  `file_account_period` varchar(20) NOT NULL DEFAULT '' COMMENT '文件账期标识',
  `bill_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '文件账期',
  `customer_name` varchar(100) NOT NULL DEFAULT '' COMMENT '客户名称',
  PRIMARY KEY (`tid`),
  UNIQUE KEY `idx_rti_fid` (`fid`)
)
COMMENT='临时文件表'

;

 

参考链接:

http://blog.csdn.net/isea533/article/details/50281151

转载于:https://my.oschina.net/linxxbaobao/blog/1550475

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值