Grails 2에서 Grails 3에서 작동하는 일련의 단위 테스트를 업그레이드하고 GORM 동적 메소드를 사용하는 도메인 테스트와 관련된 문제, 특히 addTo {myHasMany} 메소드를 업그레이드하려고합니다.Grails 3 단위 테스트에서 GORM addTo 메소드 사용하기
는 주어진 다음의 도메인은 다음 테스트 케이스() 메소드 접촉 addEmail() 메소드에서 참조 누락 addToEmails에서 발생되는 예외 Grails의 3 실패이어서
class Contact {
static hasMany = [ emails: ContactEmail ]
void addEmail(ContactEmail newEmail) {
//Clear the existing primary flag if the new email is marked primary
if (newEmail.primaryEmail == true) {
for (ContactEmail contactEmail in this.emails) {
if (contactEmail.primaryEmail == true) {
contactEmail.primaryEmail = false
}
}
}
//Implicitly set the primary flag on the new email if it is the first in the list
if ((this.emails == null) || (this.emails.size() == 0)) {
newEmail.primaryEmail = true
}
//Add the email to the contact
this.addToEmails(newEmail)
}
}
class ContactEmail {
String email
Boolean primaryEmail
static belongsTo = [ contact: Contact ]
}
개체.
@TestMixin(DomainClassUnitTestMixin)
@TestFor(Contact)
class ContactSpec {
def setup() {
}
def cleanup() {
}
@Unroll
void "test Contact addEmail()"() {
when:
Contact contact = new Contact()
ContactEmail contactEmail = new ContactEmail(email: "[email protected]", primaryEmail: false)
contact.addEmail(contactEmail)
then:
/* DOC - The add email without any other emails should implicitly set the primary email */
contact.primaryEmail.toString() == "[email protected]"
}
}
은 내가 시도하는 것 :
내가 생성 된 GORM 방법 (또는 일부)와 인스턴스를 생성하는 DomainClassUnitTestMixin과 mockDomain() 메소드를 사용하여 연락 인스턴스를 조롱했습니다.
나는 Spock Interaction Based Testing 지원을 사용하여 스터 빙을 시도했다.
사실, 나는 이것이 행운이 없이도 작동하도록 생각할 수있는 거의 모든 조합을 시도했습니다. 최신 Grails 스펙에서 테스트 섹션을 다시 읽었습니다.
여기에 앞으로 나아가서 단위 테스트를 진행할 방법이 있습니까?
연락처 도메인 개체에서 "newEmail"에 대한 유형을 수정하는 코드를 편집했습니다. –
나는 서비스에서 실행하기 위해 도메인 코드와 테스트를 모두 재구성했으며 모든 것이 예상대로 작동합니다. 이 문제는 도메인 테스트에서 도메인 객체로 완전히 제한되는 것으로 보입니다. 나는 그것들을 자주 사용하지 않으며,이 논리가 어쨌든 서비스에 있어야한다는 논쟁이 있습니다. 도메인에서 이것을 갖는 "닭고기와 달걀"의 푸른 녹이 있습니다. –