Mockito 快速入門
https://segmentfault.com/a/1190000039907700
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);
}
}
留言
張貼留言