spring-boot - 想要模拟属于另一个类的依赖项
问题描述
我要测试的是来自 UserServiceImpl 类的 abc() 方法。在该方法中,它调用属于 UserDao 依赖项的 xyz()。在 UserDao 类中,它具有 UserRepository 的依赖关系,并且 xyz() 方法使用它。那么当我测试 abc() 方法时如何模拟 UserRepository 依赖项?非常感谢任何形式的帮助。
public class UserServiceImpl{
@Autowired
UserDao userDao;
public void abc(){
userDao.xyz("a");
}
}
public class UserDao{
@Autowired
UserRepository userRepository;
public void xyz(String a){
Optional<User> userOptional = userRepository.findByName("mike");
}
}
解决方案
如果你想测试UserServiceImpl.abc()
然后模拟UserDao
并定义一个返回值,UserDao.xyz()
我看到你有void
没有参数的方法,但是对于这个例子有String
作为参数并返回一个User
.
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes={UserServiceImpl.class})
public class UserServiceImplTest{
@Autowired
UserServiceImpl userSvc;
@MockBean
UserDao userDao;
@Test
public void abcTest(){
//define User to return and the mock
User userToReturn = new User("Mike");
when(userDao.xyz("mike")).thenReturn(userToReturn);
User retUser=userSvc.abc("mike");
//do some assertion...
}
}
如果您想测试 UserDao,请在其自己的 Test 类中执行此操作。
推荐阅读
- java - 这个 fxml 错误代码在 JavaFx 中是什么意思
- haskell - 组成“总和的长度”是什么意思?
- angular - 如何验证 FormArray 中的 FormGroups
- sql - 如何将 SQL Server 存储过程的结果集从一台服务器导出到另一台服务器上的表中?
- html - 将数据 [缓冲区] 从 html 5 实时传输到 c# 套接字服务器的最佳方法是什么
- python - 无法在python中退出循环
- amazon-web-services - AWS Transit Gateway 的限制
- azure - azure 应用服务的构建日志在哪里?
- c++ - 关闭 QT GUI 后如何停止线程
- jenkins - Jenkins 声明性管道:未找到 npm 命令