2017-02-16 6 views
-1

안녕하세요. 테스트 중 및 통합 테스트 중 문제가 있습니다.어떻게 피할 수 있습니까? 같은 컬렉션에 대해 두 가지 표현이 있습니다.

동일한 컬렉션의 두 표현 : ClientPasswordPolicy.userCategoriesForProxyDuration; 내 도메인 중 하나에서

나는 다음과 같은 것이있다 :

Map<String, String> userCategoriesForProxyDuration 

등으로 매핑됩니다 :

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

만에 :

userCategoriesForProxyDuration joinTable: 

내 테스트의 모습을 내가 두 번째 정책을 작성하고있는 라인. 오류가 발생했습니다. 몇 번 시도해보고 시험을 보았습니다. 내가 좋아하는 경우 :

 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

유효성을 검사하고 최대 절전 모드로 망가 뜨리는 데이터베이스를 확인하기 때문에 모든 솔루션을 절약하고 플러시했습니다.