我已经为服务和控制器编写了junit 5,但我不能模拟服务和dao。它调用服务和dao类的实际方法。
@SpringBootTest(classes = {UserService.class})
@ExtendWith(MockitoExtension.class)
@ImportAutoConfiguration(RefreshAutoConfiguration.class)
public class UserServiceTest {
@Autowired
UserService service;
@MockBean
private ReadDao readDao;
@Test
public void getDataTest() {
Map<String, User> userMap = new HashMap<>();
userMap.put("Admin", new User(1,"john"));
when(readDao.getData(any())).thenReturn(userMap);
User user = service.getUserData();
}
}
字符串
用户服务
@Component
public class UserService {
@Autowired
private ReadDao readDao;
@Value("${app.user.role}")
private String role;
public User getUserData() {
User user = null;
try {
user = readDao.getData("name");
} catch (DataNotFoundException e) {
//do nothing. return empty
}
return user;
}
}
型
@MockBean不是创建mock对象,而是创建实际对象,因此调用转到dao层。我错过什么了吗?同样的情况也发生在控制器上,当我试图模拟服务调用服务类的实际方法时。
1条答案
按热度按时间djp7away1#
这个测试不需要启动整个Spring上下文。这应该是一个简单,直接的Mockito测试:
字符串