2017-02-16 71 views
-1

您好,我在測試期間以及在集成測試期間遇到問題。如何避免找到同一集合的兩個表示

找到相同集合的兩種表示形式:ClientPasswordPolicy.userCategoriesForProxyDuration;

在我的領域之一,我有以下的事情:

Map<String, String> userCategoriesForProxyDuration 

由像映射:

userCategoriesForProxyDuration joinTable: 

我的測試看起來像:

 Client client0 = Client.findByName('client0') 
     UserCategory userCategory = UserCategory.build(value:'TEST_GUILHERME') 

     Client client = Client.build(name: 'Monkey') 
     ClientPasswordPolicy policy = ClientPasswordPolicy.build(client:client) 

     client.save(flush:true) 

     policy.userCategoriesForProxyDuration = ["TEST_GUILHERME":"36"] 
     policy.addToUserCategoriesNeedApproval(userCategory) 
     policy.proxyEnabled = true 

     policy.save(flush:true,failOnError:true,insert:true) 

     User user = User.build(username: "Test1", password: "password", client: client0) 

     Team team = Team.build(name: 'myTeamMonkey', client: client, members: [user]) 

     ClientPasswordPolicy policy1 = ClientPasswordPolicy.build(client:Client.build(name:'Maria'),proxyApproverEmailAddress:'[email protected]') 
     Client client1 = Client.findByName('Maria') 
     Team team1 = Team.build(name: 'myTeamMaria1', client: client1, members: [user]) 

但在我制定第二條政策的路線是,我收到了錯誤,我做了一些嘗試和考試如果我喜歡:

 ClientPasswordPolicy.findAll() 

兩次在第二次將無論如何會得到錯誤,同樣的錯誤。所以我害怕我不知道爲什麼策略沒有被刷新到事務中並且事務正在持有,這就是爲什麼我在保存後使用刷新,即使我正在使用構建來創建我的域。

我發現有些事情就像我們做這樣的事情的ClientPasswordPolicy的驗證過程:

userCategoriesForProxyDuration nullable: true, validator: { approvals, object -> 
     if(object.proxyEnabled && !approvals) { 
      return ['invalid.proxy.user.category.required'] 
     } 
     for (approval in approvals) { 
      if (!(approval.key in UserCategory.list().value)) { 
       return ['invalid.proxy.approval.userType'] 
      } 
      try { 
       Integer.parseInt(approval.value) 
      } catch (NumberFormatException e) { 
       return ['invalid.proxy.approval.duration'] 
      } 
     } 

如果我註釋掉不會有任何問題,這恐怕UserCategory.list的()是造成麻煩,但我不知道該怎麼做,我試圖在保存(驗證:假)使用將無法正常工作。

+0

嘗試.withNewTransaction引起問題的所有位 - 所以保存並可能列出 – Vahid

+0

我做到了這一點,工作,但減慢了我的應用很多,因爲這是驗證的一部分,並且通常您在保存之前驗證,所以您打開一個新的事務有時GB不會在同一時間刪除該事務,因此將保留在內存中 – Galeixo

回答

0

我發現的解決方案是將所有內容都保存在測試中,因爲驗證數據庫時需要驗證數據並驗證了休眠。

相關問題