- 浏览: 610879 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
fei33423:
同意你的说法. hbase 的强一致性分为两部分来说. 数据分 ...
浅谈Hbase 的强一致性 -
zengwenbo5566:
,高人,刚安装了 genymotion 那个附带 virtu ...
VirtualBox报错Unable to load R3 module GetLastError=1790 (VERR_UNRESOLVED_ERROR -
kabike:
QQ1289714862 写道这代码有问题吧 bar1 bar ...
AtomicBoolean运用 -
QQ1289714862:
这代码有问题吧 bar1 bar2 那来的 你是不是new了两 ...
AtomicBoolean运用 -
DEMONU:
需要依赖这么多东西啊
hbase 0.96和hadoop 2.2 java 客户端的jar依赖
j2ee程序好多都涉及到了数据库操作,这时进行mock测试就没有意义,不如直接在数据库上进行操作.
进行数据库测试有两点要求
1 测试之前数据库要处在一个确定性的状态下.
2 测试不改变数据库的状态.
我觉得比较好的方法是建立一个专用的测试数据库,避免了测试数据的干扰.否则每次测试结束就要进行相应的现场恢复.
假设我们有个开发数据库allcrap,然后建立个测试数据库allcrap_test.为了保证数据库表结构的一致,可以人工同步,也可以用mysqldump进行
.\mysqldump.exe -u root -proot allcrap -d > ddl.sql
这个命令导出了allcrap数据库DDL语句,-d选项是表示不用导出数据,然后把DDL语句导入测试库即可.
.\mysql -u root -proot allcrap_test <ddl.sql
数据库结构同步以后,要将数据库中的数据达到一个确定的状态,可以用dbunit的DataSet来实现.
DataSet对应了数据库中里的数据,可以将数据库初始化.
allcrap数据库里有个表product,ddl是
对应的dataset就是
这样dbunit就能在每个测试之前把数据库的product表初始化为这三条数据.
随后的每一个测试是建立在确定性的状态上,也就能够用程序来进行自动化测试,而不用人工干预.
这样每天都可以用定时任务进行测试.
一个dbunit的testcase如下
进行数据库测试有两点要求
1 测试之前数据库要处在一个确定性的状态下.
2 测试不改变数据库的状态.
我觉得比较好的方法是建立一个专用的测试数据库,避免了测试数据的干扰.否则每次测试结束就要进行相应的现场恢复.
假设我们有个开发数据库allcrap,然后建立个测试数据库allcrap_test.为了保证数据库表结构的一致,可以人工同步,也可以用mysqldump进行
.\mysqldump.exe -u root -proot allcrap -d > ddl.sql
这个命令导出了allcrap数据库DDL语句,-d选项是表示不用导出数据,然后把DDL语句导入测试库即可.
.\mysql -u root -proot allcrap_test <ddl.sql
数据库结构同步以后,要将数据库中的数据达到一个确定的状态,可以用dbunit的DataSet来实现.
DataSet对应了数据库中里的数据,可以将数据库初始化.
allcrap数据库里有个表product,ddl是
CREATE TABLE `product` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `price` decimal(10,2) NOT NULL, `vender_id` int(11) DEFAULT NULL, `optlock` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `product_fk_vendor_id` (`vender_id`), CONSTRAINT `product_fk_vendor_id` FOREIGN KEY (`vender_id`) REFERENCES `vendor` (`id`) ) ENGINE=InnoDB
对应的dataset就是
<dataset> <product name="旭日笔记本" price="3699" id="1" optlock="0"/> <product name="速龙 3200+" price="400" id="2" optlock="0"/> <product name="佳能打印机" price="600" id="3" optlock="0"/> </dataset>
这样dbunit就能在每个测试之前把数据库的product表初始化为这三条数据.
随后的每一个测试是建立在确定性的状态上,也就能够用程序来进行自动化测试,而不用人工干预.
这样每天都可以用定时任务进行测试.
一个dbunit的testcase如下
public class ProductDaoTest extends DBTestCase { public ProductDaoTest() { System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "com.mysql.jdbc.Driver"); System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:mysql://localhost/allcrap_test"); System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "root"); System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "root"); } @Override protected IDataSet getDataSet() throws Exception { return new FlatXmlDataSetBuilder().build(new FileInputStream( ".\\bin.\\product_dataset.xml")); } private ProductDao productDao; private SessionFactory sessionFactory; private Session session; @Override protected void setUp() throws Exception { super.setUp(); sessionFactory = new Configuration() .configure("hibernate_test.cfg.xml").buildSessionFactory(); this.session = sessionFactory.openSession(); productDao = new ProductDao(); productDao.setSession(session); } @Override protected void tearDown() throws Exception { if (this.session != null) { this.session.close(); } if (this.sessionFactory != null) { this.sessionFactory.close(); } super.tearDown(); } private void beginTx() { this.session.beginTransaction(); } private void commit() { this.session.getTransaction().commit(); } @Test public void testBasicCRUD() { this.beginTx(); Product p = this.productDao.load(2); assertEquals(Integer.valueOf(2), p.getId()); Product newProduct = new Product(); newProduct.setName("testProduct"); newProduct.setPrice(BigDecimal.valueOf(34.2)); this.productDao.save(newProduct); this.commit(); try { assertEquals("testProduct", this.getConnection() .createDataSet().getTable("product").getValue(3, "name")); } catch (Exception e) { e.printStackTrace(); } } @Test public void testProductListByPrice() { this.beginTx(); List<Product> productList = this.productDao.findProductListByPrice( new BigDecimal(400), new BigDecimal(600)); assertEquals(2, productList.size()); assertEquals(Integer.valueOf(2), productList.get(0).getId()); assertEquals(Integer.valueOf(3), productList.get(1).getId()); this.commit(); } }
发表评论
-
禁用vim中自动插入注释
2018-05-20 11:36 915我将一个配置文件复制到粘贴板,粘贴到另一个vim窗口的时候,如 ... -
maven查找所有依赖的license类型
2017-03-27 20:24 1361mvn project-info-reports:depend ... -
一些命令
2016-12-27 15:45 5351 maven assembly插件打包snapshot版本的 ... -
clojure中的agent实现
2015-07-30 18:15 871最近看了下clojure的并发,其中提到了agent.agen ... -
thrift使用中的一些问题
2015-05-07 11:11 4811 TSimpleServer居然是单线程阻塞式server ... -
maven的maven.test.skip和skipTests
2015-03-25 18:04 584maven.test.skip连编译test类都skip了 引 ... -
同步hadoop配置文件
2015-01-08 10:54 756#!/bin/bash HADOOP_HOME=/usr/l ... -
hibernate one to many 查询返回了重复的数据
2014-12-24 23:38 1364很奇怪为什么设计成这样... https://develope ... -
用eclipse来debug
2014-12-24 23:30 612不错的文章,好多debug技巧 http://www.voge ... -
修改vim里注释的颜色
2014-11-12 18:40 1303vim里蓝色的注释太难以看清楚了,在~/.vimrc里加入 h ... -
VirtualBox报错Unable to load R3 module GetLastError=1790 (VERR_UNRESOLVED_ERROR
2014-11-12 12:53 3973在win7上VirtualBox创建个虚拟机各种莫名其妙的错误 ... -
maven repository损坏导致eclipse无法将web工程发布到tomcat
2014-09-17 16:07 2312在eclipse中建立的maven的web工程,发布到tomc ... -
maven工程中解决spring的依赖问题
2014-06-27 15:54 848在maven工程中,添加了spring-aop的依赖,没想到启 ... -
C# winform程序提交带文件的form
2014-06-25 11:47 1224在html页面里,可以在form里提交file和普通input ... -
windows7 下以其他用户运行程序
2014-04-21 09:49 830windows7 下如果想以其他用户运行程序,可以按住shif ... -
tomcat中无法运行solr 4.6
2014-02-25 10:52 667运行tomcat后solr app没有部署成功.报错是 引用 ... -
eclipse 链接外部文件夹
2014-02-21 10:14 1281http://lippeng.iteye.com/blog/9 ... -
搜索引擎site关键字的站内搜索
2013-01-30 15:20 1239比如google里搜索dom element,老是有些乱七八糟 ... -
eclipse重新import被删除的项目
2013-01-14 10:55 4099eclipse工作区里项目太多了,所以删了几个(但是没物理删除 ... -
git创建branch 报错fatal: Not a valid object name: 'master'.
2013-01-11 13:01 21917听说git比svn的branch功能好,所以装了个msysgi ...
相关推荐
此外,还需要创建用于测试的类,这些类通常继承自 DbUnit 提供的 `DatabaseTestCase` 类,这样就可以利用 DbUnit 提供的 API 来管理和操作测试数据。 测试用例的设计是关键。以一个名为 `StudentDAO` 的类为例,...
DbUnit 是一个专门用于数据库测试的Java库,它扩展了JUnit框架,使得对数据库依赖的代码进行单元测试变得更加便捷和可控。在进行数据库测试时,DbUnit 能够帮助我们管理和控制测试数据库的状态,确保每次测试都能在...
DBUnit 是一个强大的Java库,专门用于数据库的单元测试。它与JUnit紧密集成,使得开发者能够在执行单元测试时,能够方便地控制和...因此,对于任何涉及到大量数据库操作的Java项目,DBUnit都是一个值得考虑的测试工具。
标题中的“spring+dbunit测试访问数据库代码”指的是在Java开发中使用Spring框架与DBUnit进行集成,以实现对数据库的测试。DBUnit是用于数据库单元测试的工具,它可以加载和验证数据库的数据状态,确保测试的隔离性...
在描述中提到的"flash能过控制java来运用数据库",这可能是指通过Java的Flex或Adobe AIR接口,使Flash应用程序能够与Java后端进行交互,进而利用Dbunit对数据库进行操作。这样的组合可以让前端的富媒体应用具有强大...
在软件开发中,测试是保证代码质量和功能正确性的重要环节,而 DBUNIT 尤其适用于对数据库操作进行测试,特别是在进行批量数据处理时。 批量对比测试在数据库测试中扮演着关键角色,因为往往需要确保大量的数据导入...
DBunit是一个开源工具,专为需要对数据库操作进行单元测试的场景设计。在软件开发过程中,特别是当应用程序与数据库紧密耦合时,进行有效的单元测试变得非常具有挑战性。DBunit通过为测试用例提供一种机制来控制和...
通过这样的方式,DbUnit 和 SqlMap 结合使用,可以有效地对数据库操作进行单元测试,保证代码质量,并且简化了测试过程。测试的覆盖率和可靠性都会得到显著提升,这对于大型项目来说尤其重要,因为它有助于发现潜在...
集成Spring和DBUnit,主要目的是为了在测试环境中对数据库操作进行控制,确保测试的隔离性和准确性。以下是一些关键步骤: 1. **配置Spring测试环境**:使用Spring Test模块,创建一个继承自`...
7. **异常处理**:在测试过程中,如果数据不匹配或者数据库操作失败,DBUnit 将抛出异常,如 `ComparisonFailure` 或 `DatabaseUnitException`,帮助定位问题。 8. **自定义类型处理器**:DBUnit 默认支持基本数据...
2. 数据库操作:它提供了一系列API来填充数据库(通常称为“setup”)、清理数据库(“teardown”)以及在测试之间执行数据比较(“assertion”)。这些操作确保了测试环境的一致性。 3. 数据对比:DbUnit 可以对...
1. **Dbunit**:主要用于单元测试,可以帮助验证数据库操作的正确性。 2. **QTP**(Quick Test Professional):自动化功能测试工具,模拟用户操作,验证系统功能。 3. **DataFactory**:自动生成数据库测试数据,...
DBUnit与H2内存数据库结合是进行单元测试的一种高效方法,尤其在开发Java应用程序时,它可以帮助开发者确保数据层的功能正确性。这篇文章将详细介绍如何利用DBUnit和H2内存数据库来构建单元测试环境。 首先,DBUnit...
* DBunit:一个开源的数据库功能测试框架,可以对数据库的基本操作进行白盒的单元测试。 * Junit:一个 Java 语言的单元测试框架,可以对数据库的单元测试。 * Oracle Test Manager:一个商业的数据库测试工具,可以...
在Spring框架中,进行Dao层的集成单元测试时,常常会结合Dbunit工具来实现数据库相关的测试。...这种方法能够提高代码质量,减少因为数据库操作错误导致的问题,同时也方便了持续集成和持续部署过程中的自动化测试。
- 测试驱动开发(TDD):在编写业务代码之前,先用 DBUnit 编写测试用例,确保数据库操作的正确性。 - 集成测试:验证多个模块或服务之间的交互,确保数据库交互没有问题。 - 回归测试:每次代码更新后,通过 DBUnit...
- **DBunit**:一款开源的数据库功能测试框架,支持白盒测试。 - **QTP (Quick Test Professional)**:一款知名的自动化测试工具,可通过对象识别来模拟用户操作流程,适用于灰盒测试。 - **DataFactory**:用于自动...
`Junit`提供了测试框架,而`dbunit`扩展了对数据库测试的支持,两者结合可以有效地确保代码质量,特别是在处理数据库操作时。通过理解并熟练掌握这两个库,开发者可以提升自己的测试技能,进而提高整个团队的开发...
一切都变了,DBUnit的目的就是在每个单元测试运行之前将数据库初始化成一个预定义的状态,以保证单元测试时的断言不会因为数据库状态发生了变化而失败,同时可以解决前一个单元测试失败导致对数据库的操作未按照测试...