SpringBoot整合Dbunit进行单元测试

文章目录

    • SpringBoot整合dbunit进行单元测试
      • 简单聊一聊关于单元测试
          • 1、单元测试的定义、面向对象及特点
            • 1.1、单元测试的定义
            • 1.2、单元测试所面向的对象
            • 1.3、单元测试的特点
          • 2、为什么要写单元测试
          • 3、不写单元测试的理由
        • 一、测试的原理
        • 二、首先就是基类的编写
        • 三、测试的编写
        • 四、导包

SpringBoot整合dbunit进行单元测试

简单聊一聊关于单元测试

1、单元测试的定义、面向对象及特点
1.1、单元测试的定义

定义:单元测试是对软件或程序的基本(最小)组成单元的测试

1.2、单元测试所面向的对象

面向的对象:类和方法
在单元测试中:我们应尽量保持测试方法的原子性。也就是说,单元测试粒度越小越好。

1.3、单元测试的特点

SpringBoot整合Dbunit进行单元测试_第1张图片

2、为什么要写单元测试

在优秀的开源项目中,如Spring源码中。我们会发现有很多的单元测试。基本上每个方法都有单元测试。我们阅读到难以理解的代码时。运行一下单元测试,调试一下。也能很快理解!
SpringBoot整合Dbunit进行单元测试_第2张图片

3、不写单元测试的理由
  • 只要程序能运行就可以了,写单元测试浪费时间
  • 代码很简单不需要单元测试
  • 我保证不会有什么问题的
  • 测试人员测试一下就可以了
  • 这次没有时间写了,下次补上吧

一、测试的原理

SpringBoot整合Dbunit进行单元测试_第3张图片

二、首先就是基类的编写

public class AbstractDbunitTestCase {

    private DatabaseConnection conn;   //这个不是真正的数据库的连接的  封装

    private File tempFile;    //这个就是临时文件

    private IDataSet dataSetTestData;

    public AbstractDbunitTestCase(String testDataName) throws DatabaseUnitException {
         dataSetTestData=new FlatXmlDataSet(new FlatXmlProducer(new InputSource(AbstractDbunitTestCase.class.getClassLoader().getResourceAsStream(testDataName))));
    }

    /**
     * 这个方法的作用就是初始化上面的DatabaseConnection
     * @param conn1
     */
    public void setConn(Connection conn1) throws DatabaseUnitException {
       conn=new DatabaseConnection(conn1);
    }

    /**
     * 备份多个表
     * @param tabNames
     */
    public void backManyTable(String... tabNames) throws DataSetException, IOException {

        QueryDataSet dataSet = new QueryDataSet(conn);
        //第二步:设置要备份的这个表
        for (String tabName:tabNames) {
            dataSet.addTable(tabName);
        }
        //接下来就是备份了
        tempFile=File.createTempFile("back",".xml");
        //备份
        FlatXmlDataSet.write(dataSet,new FileOutputStream(tempFile));
    }

    /**
     * 备份一张表
     * @param tabName
     */
    public void backOneTable(String tabName) throws IOException, DataSetException {
        backManyTable(tabName);
    }


    /**
     * 插入测试数据
     */
    public void insertTestData() throws DatabaseUnitException, SQLException {
        DatabaseOperation.CLEAN_INSERT.execute(conn,dataSetTestData);
    }


    /**
     * 还原表的数据
     */
    public void resumeTable() throws DatabaseUnitException, SQLException, FileNotFoundException {
        IDataSet dataSet=new FlatXmlDataSet(new FlatXmlProducer(new InputSource(new FileInputStream(tempFile))));
        DatabaseOperation.CLEAN_INSERT.execute(conn,dataSet);
    }

}

三、测试的编写

@RunWith(SpringRunner.class)      //下面的注解是SpringBoot对dbunit的支持
@SpringBootTest(classes = Application.class)   //和原来测试的区别(导入了SpringBoot的运行环境)
public class TestUserMapper extends AbstractDbunitTestCase {

    private User exUser;   //期望返回的数据

    @Autowired
    private DataSource dataSource;

    @Autowired
    private UserMapper userMapper;

    public TestUserMapper() throws DatabaseUnitException {
        super("testdata.xml");
    }


    @Before                   //前置通知
    public void init() throws SQLException, DatabaseUnitException, IOException {
        exUser=new User(10,"小波波1","111");
        setConn(dataSource.getConnection());
        backOneTable("t_user");
        insertTestData();
    }


    @Test
    public void testFindUserById(){
        //调用方法
        User acUser = userMapper.findUserById(10);
        //断言(就是看请求回来的数据 和预期的数据是否一致)
        Assert.assertEquals(exUser.getId(),acUser.getId());
        Assert.assertEquals(exUser.getUserName(),acUser.getUserName());
        Assert.assertEquals(exUser.getPassword(),acUser.getPassword());
    }
    /**
     * 还原数据
     */
    @After
    public void destory() throws FileNotFoundException, DatabaseUnitException, SQLException {
         resumeTable();
    }
}

四、导包

 
        <dependency>
            <groupId>com.github.springtestdbunitgroupId>
            <artifactId>spring-test-dbunitartifactId>
            <version>1.3.0version>
            <scope>testscope>
        dependency>

        
        <dependency>
            <groupId>org.dbunitgroupId>
            <artifactId>dbunitartifactId>
            <version>2.5.3version>
        dependency>

希望大家关注我一波,防止以后迷路,有需要的可以加我Q讨论互相学习java ,学习路线探讨,经验分享与java Q:2415773436

你可能感兴趣的:(SpringBoot整合Dbunit进行单元测试)