能否提供一个关于Mockito中`mockedObject.doCallRealMethod()`方法的具体用法示例?
时间: 2024-12-17 22:26:36 浏览: 5
Mockito是一个流行的Java单元测试框架,用于创建模拟对象(Mocks)。当你需要测试某个方法是否被正确地调用了原生方法,或者想要隔离某些依赖并验证它们的行为时,`mockedObject.doCallRealMethod()`方法就派上用场了。
假设我们有一个`UserService`接口,它有一个`getUserById(int id)`方法,你想在测试`UserService`的`saveUser(User user)`方法时,确保当`saveUser`调用`getUserById`时,实际上是调用了真实的`UserRepository`的实现而不是Mock。这时可以这样做:
```java
import static org.mockito.Mockito.*;
// 创建 UserService 的 Mock 对象
UserService userService = mock(UserService.class);
// 假设有个 UserRepository 实现
UserRepository userRepository = ...;
// 配置 UserService 使用 UserRepository
when(userService.getUserById(anyInt())).thenAnswer(invocation -> {
// 使用 doCallRealMethod() 模拟真实方法被调用
return userRepository.getUserById((Integer) invocation.getArguments()[0]);
});
// 然后,在 saveUser 测试方法里
User userToSave = new User();
userService.saveUser(userToSave); // 这时候,getUserById 的调用会被转发到 userRepository
// 后续你可以断言 userRepository.getUserById 是否被实际调用,并检查返回结果
assertThat(userRepository.getUserById(1)).isNotNull();
阅读全文