当前位置: 首页 > 知识库问答 >
问题:

使用Spring Boot REST保存和更新的Junit测试用例

柯国安
2023-03-14

我写了一个测试用例来保存

@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);
}

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

共有1个答案

益清野
2023-03-14

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

用户服务是一个Mock对象——如果你不自己写它,它不会返回任何东西。它不会在数据库中保存任何东西。你可以验证调用这个Mock:

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);

因为user也是一个Mock对象。

所以你的测试是这样的:

@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);
}
 类似资料:
  • 我对junit mockito非常陌生,并尝试使用mockito编写junit测试用例。 这是我的方法,我必须为此编写一个jUnit。 ChefService和ChefApi传递的方法参数来自第三方api 这里是呼叫chefService。listCookbookVersions()将返回CookBookVersion类类型的迭代器,如

  • 我有这两种方法,在使用Mock实现测试时遇到了困难。我该如何参加考试? 我有麻烦得到Jboss目录而不必启动System.get属性(jboss.server.temp.dir);

  • 我试图使用spring和mockito对rest控制器进行单元测试。这是我的主控制器方法。 这是我的JUnit测试: 在输出响应中,测试失败,因为它得到404错误,但它预期成功代码为200。我相信我已经正确设置了独立配置,我会做错什么。为什么URI没有正确映射到方法?请注意,对于来自应用程序前端的相同URI,它工作正常。以下是我使用Postman工具为chrome测试的正确200响应的完整URI:

  • 问题内容: 这分别是我的hbm和测试代码。我正在使用Spring的HibernateTemplate。我不使用DAO。使用Spring 2.0.7的Hibernate 2.2.5 血红蛋白 测试 超级测试班 错误 问题答案: 好的,根本原因是我对集合的映射无效。感谢这篇关于复合映射的文章 错误: 正确 完整的映射

  • 首先,我是Spring Hibernate开发的新手。遵循了很多教程书籍,我创建了一个主要基于Spring、Hibernate标准的示例应用程序,我已经开始为Repository(DAO)方法编写一些测试用例,即查找、查找、保存、删除。 当我执行测试类时,这真是太疯狂了,并不是所有的测试用例都能正确地为ex执行。尤其是find 当我完全执行以上所有测试用例时 甚至更新测试用例的行为也很奇怪,因为在

  • 问题内容: 我读到有关构造单元测试的内容,每个类都有一个测试类,每个方法都有一个内部类。认为这似乎是组织测试的便捷方法,因此我在Java项目中进行了尝试。但是,内部类中的测试似乎根本没有被采用。 我大致是这样做的: JUnit不支持此功能,还是我做错了? 问题答案: 使内部类静态化对我有效。