2011-04-05 6 views
2

내가 참으로 독특한하도록 Grails의에서 테스트를 만들기 위해 노력하고 있어요 :Grails 고유 테스트가 실패합니까?

패키지 edu.drexel.goodwin.events.domain

클래스 UpayConfig {: 사실 제약 작동, 여기 내 수업 및 테스트 파일입니다

String name 
String siteId 
String postingCode 

static constraints = { 
    name(blank:false, maxSize:50) 
    siteId(blank:false, unique:true) 
    postingCode(blank:false) 
} 

}

패키지 edu.drexel.goodwin.events.domain

수입 grai ls.test. *

클래스 UpayConfigTests는 GrailsUnitTestCase { 보호 무효 설정() { super.setUp() }

protected void tearDown() { 
    super.tearDown() 
} 

void testCleanUpayConfigValidates() { 
    mockForConstraintsTests UpayConfig 
    def cleanUpayConfig = create() 
    assertTrue cleanUpayConfig.validate() 
} 

void testUpayConfigSiteIdMustBeUnique() { 
    mockForConstraintsTests UpayConfig 
    def upayConfigOne = create() 
    def upayConfigTwo = create() 
    assertFalse upayConfigOne.validate() 
    assertFalse upayConfigTwo.validate() 

    upayConfigTwo.siteId = '81' 
    assertTrue upayConfigOne.validate() 
    assertTrue upayConfigTwo.validate() 
} 

UpayConfig create() { 
    def upayConfig = new UpayConfig(
        siteId: '82', 
        name: 'SMT - Workshops', 
        postingCode: '6' 
      ) 
} 

}

그러나 두 번째 테스트가 실패의 upayConfig 변수를 확장 모두

내가이 사실을 함께 할 수있는 뭔가가 느낌이 ... 나도 같은 siteId이 그들 모두를 말하고에도 불구하고 .validate() true를 돌려 그 살전 e는 데이터베이스에 저장되지 않고 메모리에 저장됩니다.

모든 도움

이 많이 감사합니다, 감사합니다. -Asaf

답변

5

고유성은 데이터베이스 수준에있을 것입니다. 결코 도메인을 저장하지 않으므로 upayConfigTwo와 관련하여 고유합니다. 일반적인 모의 작업을하고 실제로 upayConfigOne에서 save()를 호출해야합니다.

1

감사합니다. 나는이 웹 사이트를 보았다 : http://www.ibm.com/developerworks/java/library/j-grails10209/index.html 그것은 그래서 다음과 같이 할 내 테스트를 수정하여 다음 "mockForConstraintsTests와 고유 제한 조건을() 테스트"라는 부분이 있고 올바르게 전달 :

void testUpayConfigSiteIdMustBeUnique() { 
    def upayConfigOne = create() 
    mockForConstraintsTests(UpayConfig, [upayConfigOne]) 
    def upayConfigTwo = create() 
    assertFalse upayConfigTwo.validate() 
    assertEquals "unique", upayConfigTwo.errors["siteId"] 

    upayConfigTwo.siteId = '81' 
    assertTrue upayConfigTwo.validate() 
} 

을 주셔서 감사합니다 당신의 도움, -Asaf

관련 문제