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

关于SpringSide的DbUnit测试的思考

阅读更多
关于SpringSide的DbUnit测试的思考

------》springSide的DbUnitUtils
/**
 * Copyright (c) 2005-2010 springside.org.cn
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * 
 * $Id: DbUnitUtils.java 1186 2010-08-29 16:34:10Z calvinxiu $
 */
package com.xx.unit.dao.account;

import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.dbunit.DatabaseUnitException;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.dbunit.ext.h2.H2Connection;
import org.dbunit.operation.DatabaseOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.ResourceLoader;
import org.springside.modules.utils.PropertiesUtils;

/**
 * 使用DBUnit初始化测试用H2嵌入式数据库数据的工具类.
 */
public class DbUnitUtils {

	private static Logger logger = LoggerFactory.getLogger(PropertiesUtils.class);
	private static ResourceLoader resourceLoader = new DefaultResourceLoader();

	/**
	 * 清除并插入XML数据文件到H2数据库.
	 * 
	 * XML数据文件中涉及的表在插入数据前会先进行清除. 
	 * 
	 * @param xmlFilePaths 符合Spring Resource路径格式的文件列表.
	 */
	public static void loadData(DataSource h2DataSource, String... xmlFilePaths) throws Exception {
		execute(DatabaseOperation.CLEAN_INSERT, h2DataSource, xmlFilePaths);
	}

	/**
	 * 插入XML数据文件到H2数据库. 
	 */
	public static void appendData(DataSource h2DataSource, String... xmlFilePaths) throws Exception {
		execute(DatabaseOperation.INSERT, h2DataSource, xmlFilePaths);
	}

	/**
	 * 在H2数据库中删除XML数据文件中涉及的表的数据. 
	 */
	public static void removeData(DataSource h2DataSource, String... xmlFilePaths) throws Exception {
		execute(DatabaseOperation.DELETE_ALL, h2DataSource, xmlFilePaths);
	}
	
	/**
	 * 在H2数据库中删除XML表示的数据. 
	 */
	public static void removeDataFromXML(DataSource h2DataSource, String... xmlFilePaths) throws Exception {
		execute(DatabaseOperation.DELETE, h2DataSource, xmlFilePaths);
	}

	/**
	 * 按DBUnit Operation执行XML数据文件的数据.
	 * 
	 * @param xmlFilePaths 符合Spring Resource路径格式的文件列表.
	 */
	private static void execute(DatabaseOperation operation, DataSource h2DataSource, String... xmlFilePaths)
			throws DatabaseUnitException, SQLException {
		IDatabaseConnection connection = new H2Connection(h2DataSource.getConnection(), "");
		for (String xmlPath : xmlFilePaths) {
			try {
				InputStream input = resourceLoader.getResource(xmlPath).getInputStream();
				IDataSet dataSet = new FlatXmlDataSetBuilder().setColumnSensing(true).build(input);
				operation.execute(connection, dataSet);
			} catch (IOException e) {
				logger.warn(xmlPath + " file not found", e);
			}
		}
	}
}


springSide的测试用的是 :

DbUnitUtils.loadData(dataSource, "/data/default-data.xml");// 加载xml数据前先清空涉及的表
DbUnitUtils.removeData(dataSourceHolder, "/data/default-data.xml");//删除xml涉及到的表的数据

如果是测试数据库,这么写可以,但如果要在应用数据库上测试(当然实际不太可能)应该用以下方式:

DbUnitUtils.appendData(dataSource, "/data/dbunit.xml"); //在原基础上增加数据
DbUnitUtils.removeDataFromXML(dataSourceHolder, "/data/dbunit.xml");//删除xml中涉及的数据

总结 :DbUnit结合spring测试框架,前者负责准备数据,后者进行测试控制。

------》附 DbUnit导出数据库到XML
package com.test.dbunit;

import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;

import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.database.QueryDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;

public class TestApp {
	
	public static void main(String[] args) throws Exception{
		Class.forName("org.h2.Driver");

		Connection conn = DriverManager.getConnection(
				"jdbc:h2:tcp://localhost/~/mySpringSide1", "sa", "");
		
		IDatabaseConnection connection = new DatabaseConnection(conn);
		QueryDataSet dataSet = new QueryDataSet(connection);
		//将整个COMMENTS表里的数据导出到 xml文件里
		dataSet.addTable("COMMENTS");
		//将ARTICLES表里符合条件的数据导出到xml文件里
		dataSet.addTable("ARTICLES","select * from ARTICLES where id < 4");
		//导出到dbunit.xml文件里
		FlatXmlDataSet.write(dataSet,new FileOutputStream("dbunit.xml"));
	}

}




分享到:
评论

相关推荐

    springside-3.2.2源码

    1. 单元测试:SpringSide 强调测试驱动开发,每个模块都有相应的单元测试,使用了 JUnit 和 Mockito 进行测试。 2. MVC 设计模式:在 Web 模块中,模型(Model)、视图(View)和控制器(Controller)之间分工明确,...

    springside开发全面讲解

    9. **测试支持**:springside鼓励单元测试和集成测试,使用JUnit和Mockito等工具,确保代码的健壮性。 在学习springside的过程中,首先需要理解Spring框架的基本原理,包括依赖注入、AOP、事务管理等核心概念。然后...

    Springside-core-4.1.0/Springside-core-4.1.0

    《SpringSide核心库4.1.0深度解析》 SpringSide是Java开发中的一款轻量级框架,它基于Spring框架,旨在简化企业级应用的开发流程。本文将深入探讨SpringSide-core-4.1.0的核心特性,以及其在实际项目中的应用。 一...

    springside3.0.zip

    6. **单元测试与集成测试**:SpringSide 3.0 强调测试驱动开发,提供了JUnit和Mockito等工具进行单元测试,以及Spring Test进行集成测试,确保代码质量。 7. **国际化支持**:SpringSide 3.0 支持多语言环境,通过...

    springside.jar

    springside-test模块提供了测试相关的工具类和配置,帮助开发者进行单元测试和集成测试。它集成了JUnit、Mockito等测试框架,使得测试代码更加简洁、易读,提高了测试覆盖率和代码质量。 四、springside-extension...

    SpringSide4 参考手册

    在介绍了常规模块之后,文档还专门提供了一节关于加密技术的章节,包括消息摘要和加密方法,以及如何在SpringSide中使用Crypto组件。 SpringSide还包含了一个定时任务的调度器,支持在Spring应用中进行定时任务的...

    springside-4.0.0.GA.zip

    5. **单元测试**:SpringSide强调TDD(测试驱动开发),因此在项目中会有详尽的单元测试,这不仅有助于保证代码质量,也提供了学习如何编写测试用例的机会。 6. **最佳实践**:SpringSide遵循Pragmatic编程原则,...

    springside

    2. **最佳实践**:SpringSide定义了一套开发规范,包括命名规则、代码风格、测试策略等,有助于提升团队间的协作效率和代码质量。 3. **示例代码**:SpringSide提供了丰富的示例代码,涵盖了Spring Framework的各种...

    springside的jar包

    8. **测试支持**:通过JUnit和Mockito等测试工具,提供了单元测试和集成测试的示例,鼓励开发者编写高质量的测试代码。 9. **文档齐全**:Springside有着详尽的中文文档,包括快速入门、模块介绍、使用示例等,方便...

    springside3文档资料收录

    SpringSide3将介绍Spring的单元测试和集成测试框架,如JUnit、Mockito,以及如何利用Spring Test进行测试驱动开发。 七、实战演练 除了理论知识,SpringSide3还提供了丰富的示例项目,让你能够在实践中学习和掌握...

    springside4-4.2.3.GA

    在持续集成和自动化测试方面,SpringSide 4.2.3.GA使用Jenkins进行持续集成,通过Maven的生命周期管理自动化构建和测试流程,保证了代码的质量。同时,它还采用JUnit和Mockito进行单元测试,通过集成TestNG实现更...

    springside-core-4.2.2.GA(含关联的test.jar)

    pom.xml配置 ...mvn install:install-file -DgroupId=org.springside -DartifactId=springside-core -Dversion=4.2.2.GA -Dfile=./springside-core-4.2.2.GA.jar -Dpackaging=jar -DgeneratePom=true

    springside-core-4.1.0.GA.jar

    6. **单元测试**:Springside鼓励并简化了单元测试的编写,通过集成JUnit和Mockito等工具,确保代码的质量。 7. **代码质量检查**:引入了FindBugs和Checkstyle等静态代码分析工具,帮助开发者发现潜在的代码问题,...

    springside4(showcase)

    SpringSide 4的showcase还会展示如何整合其他Spring模块,比如Spring Security进行权限管理,Spring Data进行数据访问,Spring AOP实现切面编程,以及Spring Test进行单元测试和集成测试。所有这些都将帮助开发者...

    有springside4.2.3-GA.jar 包

    《深入解析springside4.2.3-GA.jar:Java开发者的宝藏库》 在Java开发领域,SpringSide框架以其高效、灵活和强大的特性深受开发者喜爱。本文将围绕springside4.2.3-GA.jar这个核心组件,探讨其在Java应用中的重要...

    springside示例quickstart的eclipse工程

    SpringSide Quickstart会使用JUnit进行单元测试,你将在这里看到测试类,它们通常会继承自SpringJUnit4ClassRunner,并使用@Autowired注解注入需要的bean。 5. **src/main/webapp**:在Web应用程序中,这个目录存放...

    springside3.3.4 使用方法

    - 构建过程会自动下载所需的依赖库、编译Java源代码、执行单元测试并打包成WAR文件。 2. **部署项目**: - 将构建好的WAR文件部署到Web服务器上(例如Tomcat或Jetty)。 - 启动Web服务器,并访问部署的应用程序...

    springside3.3.4 实例

    7. **测试支持**:SpringSide 强调测试驱动开发,提供了对 JUnit 和 Mockito 等测试框架的支持。"TestSpringSide" 中的测试类可以教会我们如何编写单元测试和集成测试,确保代码质量。 总的来说,SpringSide 3.3.4 ...

    springside3.3完整版

    SpringSide 3.3可能会包含持续集成工具如Maven或Gradle的配置,以及JUnit等自动化测试框架的集成。这有助于保证代码质量,确保项目的稳定性和可扩展性。 8. **模块化设计** SpringSide项目通常采用模块化设计,每...

Global site tag (gtag.js) - Google Analytics