`
Surlymo
  • 浏览: 97460 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

单测中隔离每个case对DB数据操作

阅读更多

在公司项目中对单测框架做升级的时候,引入了h2数据库,同时希望每个case在访问h2做读写操作之后,不会影响下一个case对h2的数据访问。

 

1、最先想到的肯定是dbunit和unitils,但经过调研,发现和现有单测框架存在测试入口不一致、构造数据过程繁琐、xml导入的方式或者xsl的方式相比于SQL脚本来说更加麻烦等问题,所以就否了。

 

2、其次想到的是采用事务管理,spring的testcontext框架中提供了AbstractTransactionalJUnit4SpringContextTests来支持case的事务。每个case之前行都灌入数据,case执行完再通过事务roll back。但是由于系统存在多达30套的datasource,而且并非是由JTA管理。而spring的AbstractTransactionalJUnit4SpringContextTests只能支持单datasource。其源码如下。因而该方案也被否了。

 

	/**
	 * Set the DataSource, typically provided via Dependency Injection.
	 */
	@Autowired
	public void setDataSource(DataSource dataSource) {
		this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
	}

 

3、第三个想到的是采用spring单测框架中所提供的@DirtiesContext注解,让每个case启动前都去重新加载一遍spring上下文,这样的话,等于每次都把h2数据库给清空了,似乎这样就可以完美地解决问题,但是根据了解,DirtiesContext注解很吃内存,如果case数量太多,会严重影响执行时间,甚至让工程无法install成功,直接导致CI任务执行失败。所以这个方案也被否了。

 

4、最后采用的折衷方案是,让每个case在执行前执行建库建表语句,再写所需要的DML语句(注解化),case执行完再把所有表删除。其中的建表删表操作都是由框架负责,对使用者透明。这个方案和系统目前使用的单测框架能够很好结合。

 

所以得出的一个小经验是,没有最好的技术,只有最合适的技术。

0
0
分享到:
评论

相关推荐

    CASE大学轴承数据仿真实验报告

    《CASE大学轴承数据仿真实验报告》是一份深入探讨傅里叶变换及其在MATLAB环境中应用的学术报告。报告的核心内容围绕基2时间抽取FFT(快速傅里叶变换)算法展开,旨在通过模拟信号仿真与实际轴承数据的分析,揭示该...

    case57.rar_IEEE57节点_ieee57_ieee57节点数据_met4ut_power system

    在这个"case57.rar"压缩包中,包含了进行IEEE57节点系统潮流计算所需的全部数据,这是对电力系统运行状态进行模拟和优化的基础。 "IEEE57节点"是指一个包含57个节点的电力网络模型,这些节点代表了发电机、负荷、...

    case118.zip_IEEE118_IEEE118节点_case118_case118节点数据_matlab IEEE1

    在提供的"case118.m"文件中,很可能包含了实现IEEE118节点潮流计算的MATLAB代码。用户可以通过调用这些函数,输入系统参数,进行潮流计算并获得电压、电流、功率等关键变量的结果。MATLAB的优势在于其能够方便地进行...

    IEEE33节点数据(case33bw.m)

    IEEE33节点数据(case33bw.m)

    Dataset for R and data mining examples and case studies

    在数据分析和挖掘领域,R语言以其强大的统计计算和可视化能力被广泛应用。本数据集"Dataset for R and data ...通过实际操作和案例分析,你可以加深对数据挖掘概念的理解,并提高在实际工作中运用R语言解决问题的能力。

    达梦数据库CASE_SENSITIVE参数学习报告

    达梦数据库CASE_SENSITIVE...CASE_SENSITIVE参数是一个重要的参数,它对达梦数据库中标识符的大小写敏感性产生了重要的影响。在使用达梦数据库时,需要根据实际情况设置CASE_SENSITIVE参数,以确保数据库的正确运行。

    case when和sum case when 写法及拼接字段

    `CASE WHEN` 提供了灵活的条件判断机制,而 `SUM CASE WHEN` 则使得对数据进行条件性聚合变得更加简单。结合字符串拼接功能,这些技术可以帮助我们在复杂的数据处理任务中更加高效地完成工作。在实际应用中,根据...

    switch 语句与 case 语句一起使用,每个 case 对应一个可能的值.rar

    2. `case value1`:每个`case`后面跟一个可能的值,如果`expression`的值与`value1`相等,那么就执行对应的语句块,直到遇到`break`语句为止。 3. `break`:用于跳出当前`switch`结构,防止执行后续的`case`。如果不...

    case乱码解决

    mysql 中case when 遇到乱码解决。查询语句中含有case引起中文乱码解决方法

    Case-Structure-Auto-Linking-Example.rar_labview case

    在LabVIEW中,每个case对应一个特定的条件,而连线则代表数据流。 自动链接功能是LabVIEW的一个独特特性,它能够自动处理输入数据与各个case之间的匹配关系。当输入数据与某个case的条件相匹配时,LabVIEW会自动...

    SQL中Case语句用法讨论_BJ

    在SQL查询语言中,`Case`语句是一个非常强大的功能,用于在查询中执行条件判断,它可以根据不同的条件返回不同的结果,这使得SQL能够处理更加复杂的数据筛选和转换需求。`Case`语句有两种基本形式:简单`Case`表达式...

    详细解析 mysql 中的 case when 语句的使用

    - 使用`SUM()`函数对每个类型ID的计数器求和。 ##### 方法2:使用`CASE`语句 1. **SQL语句**: ```sql SELECT DATE(download_time) AS download_date, SUM(CASE WHEN download_type_id = 1 THEN 1 ELSE 0 END)...

    sql中的case用法

    SQL 中 Case 用法 Case 语句是 SQL 中一种强大的语句,用于根据不同的条件执行不同的操作。它可以用来实现复杂的逻辑操作,并且可以...Case 语句是 SQL 中一种非常有用的语句,可以用于实现复杂的逻辑操作和数据分析。

    Case Western Reserve University Rolling element bearing data

    《滚动轴承故障诊断数据集——Case Western Reserve University》 该数据集源于著名的Case Western Reserve University(CWRU),是机械健康监测与故障诊断领域的重要参考资料。CWRU滚动轴承数据集广泛用于研究滚动...

    QD_CaseSelect.rar

    在这个结构中,你可以为每个Case添加一个或多条条件,每个条件对应一个子VI或代码块。条件可以是布尔值、数值或字符串等,取决于你的具体需求。在编写条件时,LabVIEW提供了丰富的比较运算符和逻辑运算符,使得条件...

    Verilog语言中case语句详解及优化

    接下来,我们分别探讨 `case`、`casez` 和 `casex` 在这个例子中的表现: 1. **case**:如果 `sel` 的值为 `2'b11`,则不会有任何匹配项,因此执行 `default` 代码块。 2. **casez**:在这种情况下,`'z'` 可以与 `...

    循环中的数据操作

    在IT领域,尤其是在编程和数据分析中,循环是处理和操作数据的重要工具。循环使得我们可以对一组数据进行重复操作,而不必编写重复的代码。在这个"循环中的数据操作"的主题中,我们将深入探讨LabVIEW(Laboratory ...

    SQL中case语法的使用

    在SQL查询语言中,`CASE`语句是一个非常重要的功能,它可以用来构建复杂的条件逻辑,实现对数据的灵活处理。本文将深入探讨SQL中的`CASE`语法及其应用场景。 #### 一、基本概念 `CASE`语句允许我们在SQL查询中根据...

Global site tag (gtag.js) - Google Analytics