springboot篇】十. springboot整合dbunit

springboot整合dbunit

中国加油,武汉加油!

项目准备

  1. 本案例基于【springboot篇】九. springboot整合ssm
  2. 导入dbunit的相关依赖
    <!-- springboot对dbunit测试的支持-->
            <dependency>
                <groupId>com.github.springtestdbunit</groupId>
                <artifactId>spring-test-dbunit</artifactId>
                <version>1.3.0</version>
                <scope>test</scope>
            </dependency>
    
            <!-- dbunit包 -->
            <dependency>
                <groupId>org.dbunit</groupId>
                <artifactId>dbunit</artifactId>
                <version>2.5.3</version>
            </dependency>
    

在这里插入图片描述

1. 案例

1.1 写基类

package com.wpj.utils;

import org.dbunit.DatabaseUnitException;
import org.dbunit.database.AmbiguousTableNameException;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.QueryDataSet;
import org.dbunit.dataset.DataSetException;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.dataset.xml.FlatXmlProducer;
import org.dbunit.operation.DatabaseOperation;
import org.xml.sax.InputSource;

import java.io.*;
import java.sql.Connection;
import java.sql.SQLException;

public class AbstractDbunitTestCase {

    private DatabaseConnection conn;    // 封装的链接对象

    private File tempFile;  // 临时文件

    private IDataSet dataSet;

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

    /**
     * 初始化DatabaseConnection
     * @param connection
     * @throws DatabaseUnitException
     */
    public void setConn(Connection connection) throws DatabaseUnitException {
        this.conn = new DatabaseConnection(connection);
    }

    /**
     * 备份多个包
     * @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,dataSet);
    }

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

1.2 写xml

<?xml version='1.0' encoding='UTF-8' ?>
<dataset>
    <user id="10" name="jiekami" pwd="123456"></user>
</dataset>

1.3 写测试

package com.wpj.mapper;

import com.wpj.Application;
import com.wpj.pojo.User;
import com.wpj.utils.AbstractDbunitTestCase;
import org.dbunit.DatabaseUnitException;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.sql.DataSource;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.SQLException;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
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,"jiekami","123456");
        setConn(dataSource.getConnection());
        backOneTable("user");
        insertTestData();
    }

    @Test
    public void testFindUserById(){
        User acUser = userMapper.findUserById(10);
        //断言 判断请求回来的数据是否和预期的一致
        Assert.assertEquals(exUser.getId(),acUser.getId());
        Assert.assertEquals(exUser.getName(),acUser.getName());
        Assert.assertEquals(exUser.getPwd(),acUser.getPwd());
    }

    /**
     * 还原数据
     */
    @After
    public void destory() throws FileNotFoundException, DatabaseUnitException, SQLException {
        resumeTable();
    }
}
发布了56 篇原创文章 · 获赞 11 · 访问量 4073

猜你喜欢

转载自blog.csdn.net/TheNew_One/article/details/104380682