首页 > 其他分享 >springboot~对mybatis的start包进行单元测试

springboot~对mybatis的start包进行单元测试

时间:2022-10-11 10:59:15浏览次数:54  
标签:String userAttribute 单元测试 private class start user mybatis public

一个start包,它不需要有springboot启动类,它只提供一切公用的功能,被其它包依赖就行了,通过META-INF/spring.factories或者META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports来自动注入就可以了,我们以mybatis的start包为例,说一下如何进行单元测试。

测试项目结果

两个实体,方便进行事务测试

@Data
@EqualsAndHashCode(callSuper = true)
@TableName("user")
public class User extends BaseEntity {

	@TableId(value = "id", type = IdType.ASSIGN_ID)
	private String id;

	@NotBlank(message = "名称不能为空")
	private String username;

}
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("user_attribute")
public class UserAttribute extends BaseEntity {

	@TableId(value = "id", type = IdType.ASSIGN_ID)
	private String id;

	@TableField("user_id")
	private String userId;

	@NotBlank(message = "名称不能为空")
	private String name;

	@NotBlank(message = "值不能为空")
	private String value;
}

两个mapper类,进行实体持久化

public interface UserMapper extends BaseMapper<User> {
}
public interface UserAttributeMapper extends BaseMapper<UserAttribute> {
}

一个service类,进行事务管理

@Component
public class UserService implements IUserService {

	@Autowired
	UserMapper userMapper;

	@Autowired
	UserAttributeMapper userAttributeMapper;

	@Transactional(rollbackFor = { Exception.class })
	@Override
	public void insertUser() {
		User user = new User();
		user.setId(UUID.randomUUID().toString());
		user.setUsername("zzl4");
		userMapper.insert(user);

		UserAttribute userAttribute = new UserAttribute();
		userAttribute.setId(UUID.randomUUID().toString());
		userAttribute.setUserId(user.getId());
		userAttribute.setName("realName");
		userAttribute.setValue("占占");
		userAttributeMapper.insert(userAttribute);

	}

}

核心测试类,通过手动注入bean,来实现测试mybatis组成的能力

@EnableTransactionManagement表示开启事务;DataSourceTransactionManagerAutoConfiguration是自动注入事务需要的bean

@EnableTransactionManagement
@SpringBootTest(classes = { MybatisAutoConfiguration.class, DataSourceAutoConfiguration.class,
		MybatisPlusAutoConfiguration.class, DataSource.class, SqlSessionFactory.class,
		DataSourceTransactionManagerAutoConfiguration.class, UserService.class })
@MapperScan(basePackages = "com.lind.common.mybatis.mapper")
public class CurdTest {

	@Autowired
	UserMapper userMapper;

	@Autowired
	IUserService userService;

	@Test
	public void insert() throws IOException {
		User user = new User();
		user.setId(UUID.randomUUID().toString());
		user.setUsername("zzl");
		userMapper.insert(user);
	}

	/**
	 * @DataSourceTransactionManagerAutoConfiguration 注入事务所需的bean
	 * @throws IOException
	 */
	@Test
	public void trans() throws IOException {
		// 开启事务:@EnableTransactionManagement,注入事务的bean:DataSourceTransactionManagerAutoConfiguration
		// 事务需要在新的bean中,不需要在单元测试中直接使用@Transactional
		// 使用@Transactional注解都是用在类的方法上。官网也不建议使用在接口类上面,注解肯定都是用到了aop的思想,即使用了动态代理。而如果使用cglib动态代理肯定没有办法代理接口类
		userService.insertUser();
	}

}

测试类不需要RunWith了,@SpringBootTest直接集成了@ExtendWith注解

标签:String,userAttribute,单元测试,private,class,start,user,mybatis,public
From: https://www.cnblogs.com/lori/p/16778457.html

相关文章

  • Spring-04:持久化数据,了解SpringDataJPA和Mybatis
    1Javaweb阶段的方式在之前的Javaweb项目中,我们持久化数据的方式还是直接使用JDBC参考:Javaweb总结-目前开发Javaweb的套路梳理https://www.cnblogs.com/fancy2022/p/16......
  • mybatis动态sql语句拼接总结
    mybatis中如果需要在where后面追加条件判断语句中有多个判断条件我们可以在if条件后面写上类似三元运算符的关系表达式其中a.pub_timeISNOTNULL为条件如果......
  • [转]Mybatis plus 多租户方案踩坑记录
    原文地址:Mybatisplus多租户方案踩坑记录-掘金(juejin.cn)公司的老项目要改造多租户,于是进入了大坑,本文写点遇到的坑以及解决方案,每次遇到问题在网上搜了好久,记录......
  • MyBatis-plus 新增时List转String 查询时String转list
    MyBatis-plus新增时List转String查询时String转list1.需求说明项目为:SpringBoot+MyBatisPlus采用实体类接受参数,有一个参数为List,对应的数据库字段为nvachar,要求新......
  • MyBatis之ResultMap的association和collection标签详解
    一、前言MyBatis创建时的一个思想是:数据库不可能永远是你所想或所需的那个样子。我们希望每个数据库都具备良好的第三范式或BCNF范式,可惜它们并不都是那样。如果能有一......
  • SpringBoot+MyBatis Plus对Map中Date格式转换的处理
    在SpringBoot项目中,如何统一JSON格式化中的日期格式问题现在的关系型数据库例如PostgreSQL/MySQL,都已经对JSON类型提供相当丰富的功能,项目中对于不需要检索......
  • 【测试】Selenium录制单元测试脚本
    因业务性质发生变化,公司有要求做业务测试自动化用以替代人工进行可重复执行操作。基于学习曲线比较平缓且容易上手考虑,最终选择了Selenium作为自动化测试框架。安装Selenium......
  • MyBatis之ResultMap的association和collection标签详解
    一、前言MyBatis创建时的一个思想是:数据库不可能永远是你所想或所需的那个样子。我们希望每个数据库都具备良好的第三范式或BCNF范式,可惜它们并不都是那样。如果能......
  • MyBatis理论
    MyBatis简介MyBatis是什么?MyBatis是一款优秀的持久层框架,一个ORM(对象关系映射)框架,它支持定制化SQL、存储过程以及高级映射。MyBaits避免了几乎所有JDBC代码和手动设置参......
  • java.sql.SQLException: Before start of result set
    今天遇到了一个尴尬的问题用jdbc来建立数据源调用数据库封装一条数据爆红了,如下图先是封装多条数据  并无任何报错,但是封装一条数据的时候,就爆红了   ......