服务单元测试

时间:2017-12-24 13:44:24

标签: java unit-testing testing

我有一个服务类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());


    }

现在我被困在这里,而且我不知道如何将一个集合作为参数输入

1 个答案:

答案 0 :(得分:2)

您可以autowire服务interface

 @Autowired UserService userService; 
 @Test
 public void createUserTest() {

    //rest of code

        }

在这种情况下,您正在进行集成测试而不是单元测试,因为您使用的是真实对象,对于单元测试,您将不得不模拟对象,您可以使用Mockito框架。

如果您希望回滚插件,请将@Transactional置于测试方法之上