关于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"));
}
}
分享到:
相关推荐
1. 单元测试:SpringSide 强调测试驱动开发,每个模块都有相应的单元测试,使用了 JUnit 和 Mockito 进行测试。 2. MVC 设计模式:在 Web 模块中,模型(Model)、视图(View)和控制器(Controller)之间分工明确,...
9. **测试支持**:springside鼓励单元测试和集成测试,使用JUnit和Mockito等工具,确保代码的健壮性。 在学习springside的过程中,首先需要理解Spring框架的基本原理,包括依赖注入、AOP、事务管理等核心概念。然后...
《SpringSide核心库4.1.0深度解析》 SpringSide是Java开发中的一款轻量级框架,它基于Spring框架,旨在简化企业级应用的开发流程。本文将深入探讨SpringSide-core-4.1.0的核心特性,以及其在实际项目中的应用。 一...
6. **单元测试与集成测试**:SpringSide 3.0 强调测试驱动开发,提供了JUnit和Mockito等工具进行单元测试,以及Spring Test进行集成测试,确保代码质量。 7. **国际化支持**:SpringSide 3.0 支持多语言环境,通过...
springside-test模块提供了测试相关的工具类和配置,帮助开发者进行单元测试和集成测试。它集成了JUnit、Mockito等测试框架,使得测试代码更加简洁、易读,提高了测试覆盖率和代码质量。 四、springside-extension...
在介绍了常规模块之后,文档还专门提供了一节关于加密技术的章节,包括消息摘要和加密方法,以及如何在SpringSide中使用Crypto组件。 SpringSide还包含了一个定时任务的调度器,支持在Spring应用中进行定时任务的...
5. **单元测试**:SpringSide强调TDD(测试驱动开发),因此在项目中会有详尽的单元测试,这不仅有助于保证代码质量,也提供了学习如何编写测试用例的机会。 6. **最佳实践**:SpringSide遵循Pragmatic编程原则,...
2. **最佳实践**:SpringSide定义了一套开发规范,包括命名规则、代码风格、测试策略等,有助于提升团队间的协作效率和代码质量。 3. **示例代码**:SpringSide提供了丰富的示例代码,涵盖了Spring Framework的各种...
8. **测试支持**:通过JUnit和Mockito等测试工具,提供了单元测试和集成测试的示例,鼓励开发者编写高质量的测试代码。 9. **文档齐全**:Springside有着详尽的中文文档,包括快速入门、模块介绍、使用示例等,方便...
SpringSide3将介绍Spring的单元测试和集成测试框架,如JUnit、Mockito,以及如何利用Spring Test进行测试驱动开发。 七、实战演练 除了理论知识,SpringSide3还提供了丰富的示例项目,让你能够在实践中学习和掌握...
在持续集成和自动化测试方面,SpringSide 4.2.3.GA使用Jenkins进行持续集成,通过Maven的生命周期管理自动化构建和测试流程,保证了代码的质量。同时,它还采用JUnit和Mockito进行单元测试,通过集成TestNG实现更...
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
6. **单元测试**:Springside鼓励并简化了单元测试的编写,通过集成JUnit和Mockito等工具,确保代码的质量。 7. **代码质量检查**:引入了FindBugs和Checkstyle等静态代码分析工具,帮助开发者发现潜在的代码问题,...
SpringSide 4的showcase还会展示如何整合其他Spring模块,比如Spring Security进行权限管理,Spring Data进行数据访问,Spring AOP实现切面编程,以及Spring Test进行单元测试和集成测试。所有这些都将帮助开发者...
《深入解析springside4.2.3-GA.jar:Java开发者的宝藏库》 在Java开发领域,SpringSide框架以其高效、灵活和强大的特性深受开发者喜爱。本文将围绕springside4.2.3-GA.jar这个核心组件,探讨其在Java应用中的重要...
SpringSide Quickstart会使用JUnit进行单元测试,你将在这里看到测试类,它们通常会继承自SpringJUnit4ClassRunner,并使用@Autowired注解注入需要的bean。 5. **src/main/webapp**:在Web应用程序中,这个目录存放...
- 构建过程会自动下载所需的依赖库、编译Java源代码、执行单元测试并打包成WAR文件。 2. **部署项目**: - 将构建好的WAR文件部署到Web服务器上(例如Tomcat或Jetty)。 - 启动Web服务器,并访问部署的应用程序...
7. **测试支持**:SpringSide 强调测试驱动开发,提供了对 JUnit 和 Mockito 等测试框架的支持。"TestSpringSide" 中的测试类可以教会我们如何编写单元测试和集成测试,确保代码质量。 总的来说,SpringSide 3.3.4 ...
SpringSide 3.3可能会包含持续集成工具如Maven或Gradle的配置,以及JUnit等自动化测试框架的集成。这有助于保证代码质量,确保项目的稳定性和可扩展性。 8. **模块化设计** SpringSide项目通常采用模块化设计,每...