这篇文章给大家介绍如何在Springboot中利用Mybatis-Plus实现一个单元测试功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
? ?单元测试长久以来是热门话题,本文不会讨论需不需要写单测,可以看看参考<强>资料1 强>,我个人认为写好单测应该是每个优秀开发者必备的技能,关于写单测的好处在这里我就不展开讨论了,快速进入本文着重讨论的话题,如何写好数据库单测。
? ? <强>为什么要写数据库单测吗?>强相信大家是不是有这样类似的经历,在写完复杂的sql语句后,自信满满的提测,发现很大一部分错误都是因为sql语句出现问题了,要么少写逗号,要么漏了字段,悔不当初哇,为啥写完不多测测呢!
? ?没关系!这就教你如何写数据库单测,让你轻松告别数据库相关虫。
1。数据库样例和环境
? ?我们以用户表为例开启本次教程:
1.1图用户表ER图
? ?引入mybatis-plus插件后,mapper类如下:
@Mapper public interface  UserMapper extends BaseMapper< UserDO>, { }
? ?整体环境:
- <李>
弹簧引导:1.5.18。李发布
> <李>mybatis: 3.5.1
李> <李>mybatis +: <强> 3.4.0(此时最新版本,我们会用到最新版本的特性)强>
李>? ?在这里我们直接测试的是mybatis +提供的一些CRUD,当然这些CRUD一般都不会错,实际项目中我们只需对自定义的SQL进行单元测试即可。
2。方式一:启动整个环境
? ? <强>这种方式应该是日常环境使用最多的>强,利用SpringBoot自1.4.0版本开始引入的@SpringBootTest注解可以启动我们单元测试所需要的所有环境,当然,如果你项目中运用了其他分布式服务,他同样也会启动这些服务。单测代码如下:
@RunWith (SpringRunner.class) @SpringBootTest public class  UserMapperTest { @ autowired才能 private 才能;UserMapper  usermap; @Test才能 public 才能;void  testCurd (), { ,,,UserDO UserDO =, new UserDO (); ,,,userDO.setId (7777 l); ,,,userDO.setGmtModified (new 日期()); ,,,userDO.setGmtCreate (new 日期()); ,,,userDO.setRealName (“ke"); ,,,userDO.setUserName (“ni"); ,,,userMapper.insert (userDO); ,,,UserDO select =, userMapper.selectById (1); ,,,System.out.println(选择); ,,} }
@SpringBootTest注解可以设置需要启动加载的类,按需加载
引用>3。方式二:只启动数据库环境+远程数据库
? ?在参考资料2中,最新的mybatis-plus发布版本(3.4.0)中引入了测试起动器,如图:
3.1图Mybatis-plus3.4.0引入测试模块
? ?模块引入了新的注解<代码> @MybatisPlusTest> 代码,这个注解可以帮助我们只启动特定特定的模块,直接上单测代码:
@RunWith (SpringRunner.class) @MybatisPlusTest @AutoConfigureTestDatabase (replace =, AutoConfigureTestDatabase.Replace.NONE) public class  UserMapperTest { @ autowired才能 private 才能;UserMapper  usermap; @Test才能 public 才能;void  testCurd (), { ,,,UserDO UserDO =, new UserDO (); ,,,userDO.setId (7777 l); ,,,userDO.setGmtModified (new 日期()); ,,,userDO.setGmtCreate (new 日期()); ,,,userDO.setRealName (“ke"); ,,,userDO.setUserName (“ni"); ,,,userMapper.insert (userDO); ,,,UserDO select =, userMapper.selectById (1); ,,,System.out.println(选择); ,,} }? ?是不是很轻松?不过我们要注意如下几点关键点:
<李>
<代码> @AutoConfigureTestDatabase(取代=AutoConfigureTestDatabase.Replace.NONE) 代码>的作用是使用自定义的数据源,而非使用自动配置的嵌入式内存数据源
李> <李>如果你在项目正在使用类似于德鲁伊的连接池,在测试模块的时候需要在应用程序配置文件里面直接使用jdbc数据源即可,因为<代码> @MybatisPlusTest
如何在Springboot中利用Mybatis-Plus实现一个单元测试功能