junit/spring-test/spring-test-dbunit/dbunit集成数据库单元测试

DAL层的测试核心目标:

1、表结构是否是预期;

2、SQL逻辑是否正确;

3、各类配置、代码是否有遗漏、且是否符合预期;

各技术框架选取原因

Junit:不用说了,标准的测试框架;

spring-test:用spring的IOC容器环境,以及各种框架和spring集成的便利;

DBunit:数据库数据透明化,查询数据不受数据库数据影响;

spring-test-dbunit:提供dbunit注解方式,把相关的资源注入spring ioc容器中。很有意思的一个东西,见github:https://github.com/springtestdbunit/spring-test-dbunit

各技术框架版本&Maven库情况

<dependency>
    <groupId>junitgroupId>
    <artifactId>junitartifactId>
    <version>4.11version>
    <scope>testscope>
    dependency>
<dependency>  
  <groupId>com.github.springtestdbunitgroupId>  
  <artifactId>spring-test-dbunitartifactId>  
  <version>1.0.1version>  
  <scope>testscope>  
dependency>
<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-testartifactId>
    <version>3.1.3.RELEASEversion>
    <scope>testscope>
dependency>
<dependency>
    <groupId>org.dbunitgroupId>
    <artifactId>dbunitartifactId>
    <version>2.4.9version>
    <scope>testscope>
dependency>

TestCase实例代码:

 

package com.xxx.dal.dao.mysql;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import org.springframework.test.context.support.DirtiesContextTestExecutionListener;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

import com.github.springtestdbunit.TransactionDbUnitTestExecutionListener;
import com.github.springtestdbunit.annotation.DatabaseSetup;
import com.github.springtestdbunit.annotation.ExpectedDatabase;
import com.github.springtestdbunit.assertion.DatabaseAssertionMode;
import com.xxx.biz.enums.PointComputeType;
import com.xxx.biz.utils.DateUtil;
import com.xxx.dal.dao.KpiScoreConfigDAO;
import com.xxx.dal.dataobjects.KpiScoreConfigDO;

/**
 * KpiScoreConfigDAOImplTest.class Description:
 * 
 * @author simple56 2013-6-20
 * 
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:META-INF/spring/secp-mysql.xml","classpath:spring/dbunit.xml"})
@Transactional
@TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true)
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,
    DirtiesContextTestExecutionListener.class,
    TransactionDbUnitTestExecutionListener.class })
public class KpiScoreConfigDAOImplTest {
    @Resource
    private KpiScoreConfigDAO kpiScoreConfigDAO;
    
    @Test
    @DatabaseSetup("sec_dp_kpi_score_config.xml")
    public void queryAllNodesBy(){
        List result=kpiScoreConfigDAO.queryAllNodesBy("2013-04-01 00:00:00", "2013-08-01 00:00:00");
        Assert.assertEquals(2, result.size());
    }
    
    @Test
    @DatabaseSetup("sec_dp_kpi_score_config.xml")
    @ExpectedDatabase(assertionMode=DatabaseAssertionMode.NON_STRICT,value="sec_dp_kpi_score_config_insert_expect.xml")
    public void insert(){
        Date c=new Date();
        KpiScoreConfigDO kpiScoreConfigDO=new KpiScoreConfigDO();
        kpiScoreConfigDO.setNodeId("01003001");
        kpiScoreConfigDO.setPointComputeType(PointComputeType.Asc.name());
        kpiScoreConfigDO.setScore(new BigDecimal(3.5));
        kpiScoreConfigDO.setStartTime(DateUtil.getCurrentQ1StartTime(c));
        kpiScoreConfigDO.setValue(new BigDecimal(50.0));
        kpiScoreConfigDAO.insert(kpiScoreConfigDO);
        
        Date c2=new Date();
        KpiScoreConfigDO kpiScoreConfigDO2=new KpiScoreConfigDO();
        kpiScoreConfigDO2.setNodeId("01003001");
        kpiScoreConfigDO2.setPointComputeType(PointComputeType.Asc.name());
        kpiScoreConfigDO2.setScore(new BigDecimal(5.0));
        kpiScoreConfigDO2.setStartTime(DateUtil.getCurrentQ1StartTime(c2));
        kpiScoreConfigDO2.setValue(new BigDecimal(90.0));
        kpiScoreConfigDAO.insert(kpiScoreConfigDO2);
    }
    
}

 

最后我想说:

这里集成了各测试框架常用的用法,其中最大的特点在于使用了很多注解,不再是以前的各种对TestCase父类的继承,让测试过程爽起来!尤其是spring-test-dbunit,让dbunit的使用也迈向注解时代,good!

 

 

 

 

转载于:https://www.cnblogs.com/yingfeng56/p/3358753.html

你可能感兴趣的:(junit/spring-test/spring-test-dbunit/dbunit集成数据库单元测试)