我要測驗的是 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");
}
}
uj5u.com熱心網友回復:
如果你模擬 UserDao 你不需要模擬 UserRepository 因為只有真正的 UserDao 需要它。
如果您將 @Autowired 注釋移動到建構式,則在您的測驗中注入會更容易。
public class UserServiceImpl{
private final UserDao userDao;
@Autowired
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
public void abc(){
userDao.xyz("a");
}
}
測驗:
UserDao userDao = mock(UserDao.class);
UserServiceImpl subject = new UserServiceImpl(userDao);
subject.abc();
[...]
uj5u.com熱心網友回復:
如果你想測驗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 類中執行此操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/337282.html
上一篇:SpringSecurityBCryptPasswordEncoder:編碼后的密碼看起來不像使用相同密碼的BCrypt
下一篇:當映射到POJO中的Double型別欄位時,JacksonObjectMapper將Integer值轉換為null
