为什么我不能在嘲笑mvcvc上测试重复的ID创建?

时间:2019-07-20 13:05:32

标签: java spring h2 mockmvc

我通过H2创建了一些API-mem db,春季启动。

然后我由testCase创建了mockMvc,这是测试重复ID创建错误。

我要在创建相同用户(预期重复的用户ID)时进行测试。 但这总是200行。。

我的错误是什么?或一些错误?还是需要H2 DB配置?

如果我运行应用程序并使用PostMan进行测试,它将返回409,并且具有相同的用户ID测试

测试用例类:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTests {

测试用例:

@Test
public void createUser_alreadyExistsUser_409() throws Exception{

    User user = new User().setId("testId").setPassword("testPassword");

    mockMvc.perform(post("/users")
            .content(objectMapper.writeValueAsString(user))
            .contentType(MediaType.APPLICATION_JSON))
            .andDo(print());
    mockMvc.perform(post("/users")
            .content(objectMapper.writeValueAsString(user))
            .contentType(MediaType.APPLICATION_JSON))
            .andDo(print());
    mockMvc.perform(post("/users")
            .content(objectMapper.writeValueAsString(user))
            .contentType(MediaType.APPLICATION_JSON))
            .andDo(print());
    mockMvc.perform(post("/users")
            .content(objectMapper.writeValueAsString(user))
            .contentType(MediaType.APPLICATION_JSON))
            .andDo(print());
    mockMvc.perform(post("/users")
            .content(objectMapper.writeValueAsString(user))
            .contentType(MediaType.APPLICATION_JSON))
            .andDo(print());

    final ResultActions resultActions = this.mockMvc.perform(post("/users")
            .content(objectMapper.writeValueAsString(user))
            .contentType(MediaType.APPLICATION_JSON))
            .andDo(print());

    resultActions
            .andExpect(status().isConflict())
            .andExpect(jsonPath("$.message").value(ErrorCodes.Constants.USER_ID_ALREADY_EXISTS_ERROR));
}

和用户服务:

@Service
public class UserServiceImpl implements UserService {

private final UserRepository userRepository;

public UserServiceImpl(UserRepository userRepository){
    this.userRepository = userRepository;
}

@Override
public User createUser(User user) {
    UserEntity userEntity = new UserEntity().setId(user.getId()).setPassword(this.encryptPassword(user.getPassword()));
    userRepository.findById(user.getId()).ifPresent( k -> {
        throw ConflictException.getUserAlreadyExistsException(user.getId());
    });

    userRepository.save(userEntity);

    return null;
}

private String encryptPassword(String password){
    MessageDigest md = null;
    try {
        md = MessageDigest.getInstance("SHA-256");
    }catch(NoSuchAlgorithmException e){
        e.printStackTrace();
    }
    md.update(password.getBytes());

    return new String(md.digest());
}
}

1 个答案:

答案 0 :(得分:-1)

我在测试之前使用了以下代码:

@MockBean
UserRepository userRepository

删除此代码后,它可以工作。