안녕하세요. 테스트 중 및 통합 테스트 중 문제가 있습니다.어떻게 피할 수 있습니까? 같은 컬렉션에 대해 두 가지 표현이 있습니다.
동일한 컬렉션의 두 표현 : 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의 두렵다() 문제가 발생하지만 이걸로 무엇을해야할지 모르겠다. 저장 중에 사용하려고했는데 (유효성 검사 : 거짓) 작동하지 않습니다.
문제를 일으키는 모든 비트 주변에서 .withNewTransaction을 시도하십시오. 그래서 저장하고 가능하면 목록에 저장하십시오. – Vahid
이 작업을 수행했지만 응용 프로그램의 속도가 느려졌습니다. 유효성 검사의 일부이기 때문에 일반적으로 저장 전에 유효성 검사를 수행합니다. 새 트랜잭션을 열 때 가끔 GB가 같은 순간에 트랜잭션을 제거하지 않으므로 메모리를 보유하게됩니다. – Galeixo