1. 简介
在这篇文章中我们将通过【新增用户】用例,讲解 Mockito 框架的基本使用,以及与 Junit5 测试框架的集成。
2. Maven 依赖
2.1. 关键依赖
- junit-jupiter-engine:5.6.2
mockito-core:3.9.0
<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.6.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>3.9.0</version> <scope>test</scope> </dependency>
2.2 Mockito Extension
在
JUnit5
中需要添加mockito-junit-jupiter:3.6.28
依赖,用于支持MockitoExtension
。<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-junit-jupiter</artifactId> <version>3.6.28</version> <scope>test</scope> </dependency>
3. 待测试用例【新增用户】
业务代码
UserServiceImpl 类负责具体的业务逻辑实现,其通过调用 UserDao 的 insert 方法,将用户信息持久化到 DB。
public interface UserService {
boolean save();
}
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public boolean save() {
boolean result = userDao.insert();
return result;
}
}
public class UserDao {
public boolean insert() {
System.out.println("user insert success");
return true;
}
}
4. 创建测试代码
4.1. 测试思路
TODO...
4.2. 关键步骤:
- 新增测试类
UserServiceTest
- 新增测试方法
testSaveUser_Default_Success
- 为
UserServiceTest
类添加@ExtendWith(MockitoExtension.class)
,因为在Junit5
中需要通过该方式来让@Mock
、@InjectMocks
生效。 - 通过
@Mock
创建一个 UserDao 模拟实现类 - 通过
@InjectMocks
创建一个 UserService 模拟实现类,并将@Mock
标记的 UserDao 依赖注入其内部。 遵循 Given-When-Then 的结构方式编写测试方法。
- Given 给出上下文(准备数据)
- When 执行测试代码
- Then 断言测试结果
定制 Mock 对象(UserDao 对象)
insert
方法的返回值,使其返回true
。when(dao.insert()).thenReturn(false);
断言测试结果
assertTrue(result);
完整示例代码:
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
// @Mock 为 UserDao 模拟一个实现。
@Mock
UserDao dao;
// @InjectMocks 为 UserServiceImpl 类模拟一个实现,另外还将 @Mock 标记的依赖模拟注入到其中。
@InjectMocks
UserServiceImpl service;
@Test
@DisplayName("测试新增用户用例")
void testSaveUser_Guide() {
// Given
when(dao.insert()).thenReturn(true);
// When
boolean result = service.save();
// Then
assertTrue(result);
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。