23.集成测试框架Mockito

本文详细介绍如何在SpringBoot项目中使用Mockito进行单元测试,包括依赖引入、配置、dao层和服务层开发,以及如何创建模拟对象进行测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Mockito简介
Mockito是用于生产模拟对象的工具,其特点是对于某些不容易构造(如HttpServletRequest)或者不容易获取的复杂对象(如JDBC中的ResultSet),可用一个虚拟对象(Mock)来完成测试。Mockito最大的优点是可将单元测试的耦合分解开,即如果代码中对另一个类或者接口有依赖,Mockito可模拟这些依赖,并协助验证所调用的依赖行为。

2.引入依赖
新建一个SpringBoot工程,并在pom.xml文件中添加集成Mockito所需要的dependency。本小节列举Mockito的简单用法,更多高级用法请读者自行上官网学习。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.1.1</version>
</dependency>
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.18.2</version>
	<scope>provided</scope>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
	<exclusions>
		<exclusion>
			<groupId>org.junit.vintage</groupId>
			<artifactId>junit-vintage-engine</artifactId>
		</exclusion>
	</exclusions>
</dependency>

3.添加配置
在application.properties文件中添加如下配置信息。

############################################################
#
# MySQL配置
#
############################################################
### 连接信息
spring.datasource.url = jdbc:mysql://localhost:3306/mydb
### 用户名
spring.datasource.username = root
### 密码
spring.datasource.password = admin123
### 驱动
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver

############################################################
#
# MyBatis配置
#
############################################################
### po类存放目录
mybatis.type-aliases-package = com.leichuangkj.mockito.dao.po
### mapper(.xml)资源文件存放路径
mybatis.mapper-locations = classpath:mybatis/mapper/*.xml

4.dao层开发
首先在项目目录“/src/main/java/com/leichuangkj/mockito”下新建“/dao/po”目录,并在po目录下新建User实体类,具体代码如下。

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
    private Integer id;

    private String name;

    private String email;
}

然后在dao目录下新建mapper目录,并在mapper目录下新建UserMapper接口,具体代码如下。

@Repository
public interface UserMapper {
    User findByName(String id);
}

最后在resource目录下新建“mybatis/mapper”目录,并在mapper目录下新建UserMapper.xml文件,具体代码如下。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.leichuangkj.mockito.dao.mapper.UserMapper" >
    <resultMap id="BaseResultMap" type="com.leichuangkj.mockito.dao.po.User">
        <constructor>
            <idArg column="id" javaType="java.lang.Integer" jdbcType="INTEGER" />
            <arg column="name" javaType="java.lang.String" jdbcType="VARCHAR" />
            <arg column="email" javaType="java.lang.String" jdbcType="VARCHAR" />
        </constructor>
    </resultMap>
    <select id="findByName" parameterType="java.lang.String" resultMap="BaseResultMap">
        select  id, name, email
        from user
        where name = #{name,jdbcType=VARCHAR}
    </select>
</mapper>

4.service层开发
在项目目录“/src/main/java/com/leichuangkj/mockito”下新建service目录,并在service目录下新建IUser接口,具体代码如下。

public interface IUser {
    ServerResponse findByName(String name);
}

然后在service目录下新建impl目录,并在impl目录下新建UserImpl实现类,具体代码如下。

@Service
public class UserImpl implements IUser {
    @Autowired
    UserMapper userMapper;

    @Override
    public ServerResponse findByName(String name) {
        User user = userMapper.findByName(name);
        if(user == null){
            return ServerResponse.createByErrorMessage("没有查询到用户");
        }
        return ServerResponse.createBySuccess(user);
    }
}

5.添加注解
在启动类MockitoApplication上添加注解“@MapperScan(basePackages = “com.leichuangkj.mockito.dao.mapper”)”,然后启动项目。

@MapperScan(basePackages = "com.leichuangkj.mockito.dao.mapper")
@SpringBootApplication
public class MockitoApplication {
	public static void main(String[] args) {
		SpringApplication.run(MockitoApplication.class, args);
	}
}

6.测试
在单元测试类MockitoApplicationTests中添加如下代码。

@SpringBootTest
class MockitoApplicationTests {
	@Test
	void contextLoads() {
		UserImpl userImpl = mock(UserImpl.class);
		User user = new User(1,"steven","125****421@qq.com");
		when(userImpl.findByName("steven")).thenReturn(user);
	}
}

右键执行MockitoApplicationTests单元测试,这时可以看到控制台显示“1 test passed”以及如下打印信息。
在这里插入图片描述

7.工程目录结构
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值