为了账号安全,请及时绑定邮箱和手机立即绑定

怎么做MYSQL代码的单元测试呢?有个好办法

标签:
单元测试

数据库相关单元测试代码怎么做?

对于一个重度耦合系统的数据库DAO部分的单元测试怎么来做呢?Mock? 很难吧,而且你怎么测试出这个SQL写的对还是不对。

下面介绍一个很好的jar,可以实现内存中启动数据库,这样单元测试就简单多了。

添加依赖

<dependency>
    <groupId>ch.vorburger.mariaDB4j</groupId>
    <artifactId>mariaDB4j</artifactId>
    <version>2.2.3</version>
</dependency>

怎么使用呢?

  1. 配置DB
DBConfigurationBuilder configBuilder = DBConfigurationBuilder.newBuilder();
configBuilder.setPort(3306); 
configBuilder.setDataDir("/home/theapp/db"); 
DB db = DB.newEmbeddedDB(configBuilder.build());
  1. 启动DB
db.start();
  1. 准备测试数据
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "");
db.source("path/to/resource.sql");
  1. 单元测试
@Test
public void testGetType() throws Exception {
		//prepare data
		Connection conn = null;
        try {
            conn = DriverManager.getConnection(getConfig().getURL(getDbName()), "root", "");
            QueryRunner qr = new QueryRunner();
            // Should be able to insert into a table
            qr.update(conn, "INSERT INTO `test` (`id`, `type`,value) VALUES (NULL, 'haha', '300');");
        } finally {
            DbUtils.closeQuietly(conn);
        }
		
		//test
		dao = (DaoImpl) SpringContextUtil.getBean("Dao");
		Map<String, String> typeValueMap = dao.getType();
		String value =  typeValueMap.get("haha");
		Assert.assertEquals("300", value);
		
		//delete data
		try {
            conn = DriverManager.getConnection(getConfig().getURL(getDbName()), "root", "");
            QueryRunner qr = new QueryRunner();
            // Should be able to insert into a table
            qr.update(conn, "delete from `test` where type='haha'");
        } finally {
            DbUtils.closeQuietly(conn);
        }
	}

怎么样,是不是既简单有给力呢。

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消