为了账号安全,请及时绑定邮箱和手机立即绑定

数据从内存数据库中自动删除

数据从内存数据库中自动删除

慕丝7291255 2021-12-10 17:01:59
我使用 HSQLDB 进行测试。问题是,当我在init()方法中添加一些数据时,我只能从首先运行的测试中获取该数据。@Beforepublic void init() {    if(isRun)       return;    isRun = true;    Role role = new Role();    role.setId(1);    role.setType("User");    roleDAO.save(role);    User user = new User();    user.setCredits(1000);    user.setEmail("User@test.com");    user.setUsername("User");    user.setPassword("qwerty");    user.setRoles(new HashSet<Role>(Arrays.asList(roleDAO.findById(1))));    userDAO.save(user);    User user2 = new User();    user2.setCredits(1000);    user2.setEmail("User2@test.com");    user2.setUsername("User2");    user2.setPassword("qwerty");    user2.setRoles(new HashSet<Role>(Arrays.asList(roleDAO.findById(1))));    userDAO.save(user2);}@Testpublic void findUserByIdTest() {    User user = userDAO.findByUsername("User");    assertEquals(userDAO.findById(user.getId()), user);}@Testpublic void addUserTest() {    User user = new User();    user.setCredits(1000);    user.setEmail("Antony@test.com");    user.setPassword("qwerty");    user.setUsername("Antony");    user.setRoles(new HashSet<Role>(Arrays.asList(roleDAO.findById(1))));    userDAO.save(user);    assertEquals(userDAO.findByUsername("Antony"), user);}@Testpublic void updateUserTest() {    User user = userDAO.findByUsername("User");    user.setCredits(0);    assertEquals(userDAO.findByUsername("User").getCredits(), (Integer) 0);}@Testpublic void removeUserTest() {    userDAO.remove(userDAO.findByUsername("User"));    assertNull(userDAO.findByUsername("User"));}碰巧该removeUserTest()方法总是首先运行,当我findAll()数据时,我会看到我在init()方法中设置的数据。之后,其他测试方法运行,但如果我在findAll()那里运行,它只会返回任何内容,这意味着不存在数据。另外,我已经设置了 hibernate.hbm2ddl.auto=create。我在这里错过了什么?为什么我可以在第一个运行方法中获取数据,但在其他方法中数据就消失了。
查看完整描述

1 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

预期:Spring 存储库测试是事务性的,并且默认情况下在每个测试结束时回滚事务。

即使您选择不回滚,每个测试都应该独立于其他测试,并且应该能够单独运行。您也不应该依赖执行顺序。findUserByIdTest()如果removeUserTest()先运行,您将失败。

因此,首先要清理数据库并在每次测试之前插入测试数据。如果每次测试后都让 Spring 回滚,则不需要清理,但仍应在每次测试前插入测试数据。

递增 ID 应该不是问题:您只需要在测试的字段中将创建的实体或它们的 ID 搅动,并在测试中引用这些实体及其 ID,而不是使用硬编码的 ID。


查看完整回答
反对 回复 2021-12-10
  • 1 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号