我有一个服务类UserServiceImpl与方法creatUser()
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
@Override
public User createUser(User user, Set<UserRole> userRoles) throws DataAccessException {
User localUser = userRepository.findByUsername(user.getUsername());
if (localUser != null) {
LOG.info("user {} already exists. Nothing will be done.", user.getUsername());
} else {
for (UserRole ur : userRoles) {
roleRepository.save(ur.getRole());
}
user.getUserRoles().addAll(userRoles);
localUser = userRepository.save(user);
}
return localUser;
}
我试图通过单元测试来测试它,但不知道如何去做。任何帮助就足够了。我的测试用例也是如此。
@Test
public void createUserTest() {
UserServiceImpl usr = new UserServiceImpl();
User user = new User();
String[] SET_VALUES = new String[]{"ADMIN"};
UserRole userRole = new UserRole();
userRole.setRole(role);
Set<String> myset = new HashSet<String>(Arrays.asList(SET_VALUES));
ObjectMapper objectMapper = new ObjectMapper();
String[] GPXFILES1 = myset.toArray(new String[myset.size()]);
usr.createUser(user,myset.toArray());
}
现在我被困在这里,我不知道如何传递一个集合作为参数输入
你可以autowire
服务interface
@Autowired UserService userService;
@Test
public void createUserTest() {
//rest of code
}
在这种情况下,您正在进行集成测试而不是单元测试,因为您使用的是真实对象,对于单元测试您将不得不模拟对象,您可以使用Mockito框架。
如果您希望回滚插件,请将@Transactional
置于测试方法之上