涉及数据库操作的单元测试,最麻烦的就是基础数据准备、正确的验证数据。这两项工作以前我都是手工完成,存储过程、SQL搞得挺乱,最近试了试DBUNIT还是不错,为准备数据提供了一种思路。
测试类的基类如下:
public class TestBase extends DBTestCase
{
private static String[] paths ={"conf/spring-context.xml"};
private static ApplicationContext ctx = null;
private static final String DEFAULT_LOG4J_XML_CONFIG_FILE =
"conf/log4j.properties";
protected Logger log = Logger.getLogger(getClass());
private String name;
private static IDataSet databaseDataSet;
static {
PropertyConfigurator.configure(DEFAULT_LOG4J_XML_CONFIG_FILE);
ctx = new FileSystemXmlApplicationContext(paths);
}
public TestBase(){}
public void init(boolean isInit){
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:oracle:thin:@localhost:1521:orcl" );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "oracle.jdbc.driver.OracleDriver" );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "SSS" );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "SSS" );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_SCHEMA, "APP" );
}
public Object getBean(String beanName){
return ctx.getBean(beanName);
}
/**
* 初始化数据库连接
* @throws SQLException
* @throws Exception
*/
protected void initConn(){
try {
databaseDataSet = getConnection().createDataSet();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 业务方法执行后,取数据库中的记录
* @param tableName
* @return
* @throws DataSetException
*/
protected static ITable getDbTable(String tableName) throws DataSetException{
return databaseDataSet.getTable(tableName);
}
/**
* 从XML文件中取预先准备的正确数据,用于验证db数据。
* @param tableName
* @return
* @throws DataSetException
* @throws Exception
*/
protected ITable getXmlTable(String tableName) throws DataSetException, Exception{
return new XmlDataSet(new FileInputStream("validatedata/"+tableName+".xml")).getTable(tableName);
}
protected DatabaseOperation getSetUpOperation() throws Exception
{
return DatabaseOperation.NONE;
}
protected DatabaseOperation getTearDownOperation() throws Exception
{
return DatabaseOperation.DELETE_ALL;
}
具体一个测试类:
public class LogFtpletTest extends TestBase {
LogFtplet log = new LogFtplet();
public void setUp() {
super.initConn();
}
public void testOnFend() throws DataSetException,
DatabaseUnitException, Exception {
log.onAppendStart(session, request);//业务方法
ITable expectedTable = getXmlTable("T_RECEIVE_STATUS");//事先准备的XML正确数据
ITable actualTable = getDbTable("T_RECEIVE_STATUS");//业务方法执行完后,数据库表数据
Assertion.assertEqualsIgnoreCols(expectedTable,
actualTable,
new String[] {"S_ID", "START_TIME",
"UPDATE_TIME"}); //比较需要的列值
assertEquals(new BigDecimal(2), actualTable.getValue(0, "STATUS"));//比较需要的列值
}
}
分享到:
相关推荐
当我们将`Junit`与`dbunit`结合使用时,可以实现对数据库操作的单元测试。首先,需要在项目中引入`dbunit`的依赖,这通常通过Maven或Gradle等构建工具完成。然后,我们可以在`Junit`的测试类中导入`DbUnitRule`或...
总的来说,单元测试是保证软件质量的关键环节,而JUnit4和DbUnit的结合使用,使得对数据库驱动的应用程序进行单元测试变得更加便捷和可靠。通过深入学习和实践,开发者能够更有效地找出代码中的问题,提高代码的稳定...
在给出的链接中,博主Virgoooos分享了一个具体的DBUnit使用案例,可能涉及了如何创建和使用数据集,以及如何将DBUnit集成到JUnit测试中的具体步骤和示例代码。阅读该博客可以深入理解DBUnit的实际应用。 在实际开发...
它提供了一种在JUnit测试中添加性能指标的方法,可以衡量方法执行时间、吞吐量等。通过`@RunWith(JunitPerf.class)`注解,可以启用性能测试,然后使用`@TestForTime`、`@TestForThroughput`等注解来设定性能目标。这...
创建JUnit测试类是单元测试的第一步。在Eclipse中,右键点击项目,选择"New" > "JUnit Test Case"。在此过程中,需要选择要测试的源代码类以及要测试的方法。测试类通常会继承自`org.junit.Test`注解的基类,并且每...
今天,我们将讨论如何使用JUnit和DbUnit进行单元测试,并将其与SSH整合。 SSH单元测试 在SSH项目中,单元测试是一个非常重要的步骤,它可以确保代码的正确性和可靠性。使用JUnit,我们可以编写单元测试用例来测试...
这里提到的四个文件是Java开发中常用的单元测试框架和库,分别是JUnit、DBUnit、Unitils和Mockito。让我们逐一深入探讨它们的功能和使用方法。 **JUnit** 是Java领域中最广泛使用的单元测试框架,这里的`junit-4.11...
单元测试之道(Java):使用JUnit进行单元测试。单元测试是提高代码质量的有效手段,但大部分开发人员由于种种原因都不乐意进行单元测试。
#### 四、使用JUnit进行单元测试 1. **一次仅测试一个对象**: - 为了快速定位问题,建议每次仅针对一个对象进行单元测试。 - 这样可以避免因对象间的复杂关系而引起的混淆。 2. **给测试方法起有意义的名字**:...
Junit作为Java领域最常用的单元测试框架,为开发者提供了简单易用的API来进行测试。本案例涵盖了Spring和Struts两大框架的单元测试,旨在帮助开发者掌握如何对这两个流行的Java Web框架进行有效的测试。 一、Junit...
5. 集成其他测试框架:DbUnit 可以与JUnit、TestNG等主流的Java测试框架结合使用,为数据库测试带来便利。 在 `dbunit-2.2.3-prj.rar` 这个压缩包中,可能包含以下内容: - `www.pudn.com.txt`:这可能是一个说明...
在本实验中,我们将使用Eclipse作为开发环境,使用JUnit框架对软件单元进行测试。实验的主要目的是让学生能够完成单元测试的设计和运行,并能够正确进行黑盒测试和白盒测试的测试用例设计。 一、软件单元测试的概念...
junit3 junit4 api,单元测试的利器
在Spring框架中,进行Dao层的集成单元测试时,常常会结合Dbunit工具来实现数据库相关的测试。Dbunit是一款强大的Java库,它扩展了JUnit,为数据库提供了结构化数据的导入和导出,使得测试更加方便和可靠。下面将详细...
【使用JUnit进行单元测试】 单元测试是软件开发过程中的重要环节,它主要目的是验证程序的各个独立组件(如方法或类)是否按照预期工作。JUnit是Java编程语言中最常用的单元测试框架,它允许开发者创建和运行针对...
本篇将重点介绍如何利用**JUnit 4.5**进行单元测试,以及这个版本的一些特性。 ### JUnit简介 JUnit是一个开源的、基于Java的测试框架,由Ernst Leiss和Kent Beck共同创建,主要用于编写和运行可重复的单元测试。...
本文将通过一个经典的案例,讲解如何使用JUnit结合Eclipse进行单元测试。 知识点1:什么是单元测试 单元测试是软件测试的一种,它专门针对软件中的最小单元(通常是类或方法)进行测试。单元测试的目的是为了确保...