亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

數據從內存數據庫中自動刪除

數據從內存數據庫中自動刪除

慕絲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("[email protected]");    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("[email protected]");    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("[email protected]");    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 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號