有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用SpringBootREST保存和更新的JavaJUnit测试用例

我已经编写了一个测试用例来保存&;更新如下:

@InjectMocks
UserController uc;

@Mock
UserService userService;
@Mock
User user;

@Test
public void saveUser() throws Exception {
    SimpleDateFormat simpleformat = new SimpleDateFormat("yyyy-MM-dd hh:mm:s+ss");
    
    Long id= 2L;
    String userName = "John";
    String passWord = "john";
    Date otpSentDate = simpleformat.parse("2019-12-24 01:22:05+00");
    Date createdDate = simpleformat.parse("2019-12-24 01:22:05+00");
    Date updatedDate = simpleformat.parse("2019-12-24 01:22:05+00");
    user.setId(id);user.setUserName(userName);user.setPassWord(passWord);user.setOtpSentDate(otpSentDate);
    user.setCreatedDate(createdDate);user.setUpdatedDate(updatedDate);
    assertEquals(1, uc.saveUser(user));
}

@Test
public void updateUser() throws Exception {
    SimpleDateFormat simpleformat = new SimpleDateFormat("yyyy-MM-dd hh:mm:s+ss");
    
    Long id= 2L;
    String userName = "John";
    String passWord = "john";
    Date otpSentDate = simpleformat.parse("2019-12-24 01:22:05+00");
    Date createdDate = simpleformat.parse("2019-12-24 01:22:05+00");
    Date updatedDate = simpleformat.parse("2019-12-24 01:22:05+00");
    user.setId(id);user.setUserName(userName);user.setPassWord(passWord);user.setOtpSentDate(otpSentDate);
    user.setCreatedDate(createdDate);user.setUpdatedDate(updatedDate);
    assertEquals(1, uc.updateUser(user));
}

两种方法的控制器如下所示

 @PostMapping("/saveUser")
public int saveUser(@RequestBody User user) throws Exception {
    if (user.getUserName() == "" || user.getPassWord() == "") {
        throw new Exception("User name or Password should not be empty!");
    } else {
        userService.saveUser(user);
        System.out.println("Inserted data with id: "+ user.getId());
    }
    return 1;
}
@PutMapping("/updateUser")
public void updateUser(@RequestBody User user) {
    userService.updateUser(user);
    System.out.println("User with id "+ user.getId() + " updated successfully!");
}

和ServiceImpl。java如下所示:

@Override
public void saveUser(User user) {
    userMapper.saveUser(user);
}
 @Override
public void updateUser(User user) {
    userMapper.updateUser(user);
}

运行上述方法后,我得到如下错误:, 组织。springframework。豆。工厂UnsatifiedPendencyException:创建名为“com”的bean时出错。纳文。MybatisApplicationTests”:通过字段“用户”表示的未满足的依赖关系;嵌套的异常是org。springframework。豆。工厂NoSuchBeanDefinitionException:没有类型为“com”的合格bean。纳文。实体用户可用:至少需要1个符合autowire候选资格的bean


共 (1) 个答案

  1. # 1 楼答案

    您测试的逻辑是错误的(:

    您将userService作为模拟对象—如果您不自己编写它,它将不会返回任何内容。它不会在数据库中保存任何东西。您只需验证调用此模拟:

    then(userService).should(times(1)).saveUser(any(User.class));
    

    您不需要这些行:

    SimpleDateFormat simpleformat = new SimpleDateFormat("yyyy-MM-dd hh:mm:s+ss");
        
        Long id= 2L;
        String userName = "John";
        String passWord = "john";
        Date otpSentDate = simpleformat.parse("2019-12-24 01:22:05+00");
        Date createdDate = simpleformat.parse("2019-12-24 01:22:05+00");
        Date updatedDate = simpleformat.parse("2019-12-24 01:22:05+00");
        user.setId(id);user.setUserName(userName);user.setPassWord(passWord);user.setOtpSentDate(otpSentDate);
        user.setCreatedDate(createdDate);user.setUpdatedDate(updatedDate);
    

    因为用户也是一个模拟对象

    所以你的测试是这样的:

    @Test
    public void saveUser() throws Exception {
    //given
         given(user.getUserName()).willReturn("Username");
         given(user.getPassWord()).willReturn("Password");
         given(user.getId()).willReturn(1);
         given(userService.saveUser(any(User.class))).willReturn(user);
    //when
         int result = uc.saveUser(user);
    //then
         then(userService).should(times(1)).saveUser(any(User.class));
         assertEquals(1, result);
    }