2011-08-05 9 views
4

몇 가지 간단한 방법에 대한 단위 테스트를 쓰고 있습니다. 내가 겪고있는 문제는 도메인을 조롱해야한다고해도 '저장'이 내 도메인 객체에서 작동하지 않는다는 것입니다. 도메인 객체에서 validate를 호출하면 true로 되돌아옵니다. 심지어 어떤 이상한 오류가 발생하지 않았는지 확인하기 위해 객체를 try/catch로 둘러 쌌습니다. 전화 및 테스트를 위해 아래 코드를 작성하십시오.Grails mockDomain 저장하지 않음 저장

void test() 
{ 
    mockDomain(MyDomain) 
    Map map1= ["asdf":" "] 
    Map map2 = ["asdf":123] 
    InputObject input = new InputObject() 
      input.setForeignId("1") //not a constraint 
    input.setMap1(map1) 
    input.setMap2(map2) 
    service.methodUnderTest(profile) 
    List list = MyDomain.getAll() 
    assertEquals 1, l.size() //FAILS 
} 

def persistPublishGuids(InputObject input) 
{ 
    try{ 
    HashMap map1 = input.map1 
    for (e in map1) 
    { 
     String key= e.getKey() 
     String value = e.value 
     long size = input.map2.get(key) 
     MyDomain domain = new MyDomain (id:guid, field1:value, field2:input.foreignId, field3:size) 
     domain.save() 
    } 
    } catch(ex) 
    { 
     ex.printStackTrace() 
    } 
} 
+3

에게 그것을 참조 테스트의 모든 필드에 대한 설치 기본 데이터하지 않으려면

domainObject.save(flush:true, failOnError: true) 

또한 false로 유효성 검사 플래그를 설정 고려할 가치가있다 이것이 [sscce] (http://sscce.org/)라면 아마도 도움이 될 것입니다. 게시 한 내용은 그 자체로는 실행할 수 없습니다. 문제를 실행하고 재현하여 게시하는 간단한 예제를 만들어보십시오. 그렇게하면 문제의 근원을 밝혀 낼 수 있으며 그렇지 않은 경우 누군가에게 도움을 줄 수있는 훨씬 더 명확한 예가 될 것입니다. – ig0774

+0

내가 원했을 텐데, 알아 냈어. grails를 깨끗하게 실행 한 다음 STS에서 프로젝트를 정리/다시 빌드해야합니다. 오늘 아침에 다른 테스트를 작성하기 시작했을 때 내 도메인 객체 중 하나에 'save()'메소드가 없다고 주장했기 때문에 나는 이것을 발견했습니다. 인터넷 검색을 통해 깨끗하고 재구성 된 솔루션으로 안내했습니다. – Joseph

답변

1

문제는 grails 응용 프로그램을 정리해야하고 프로젝트를 다시 빌드해야한다는 것이 었습니다.

+0

이것은 grails의 병입니다 ... 나는 코딩하는 것보다 더 많은 시간을 청소/컴파일하는데 ... GrrrRails. – Guillaume

+0

나는이 문제를 오래받지 못했습니다. 설치 문제가 있어야합니다. – Joseph

+0

나는 일반적으로 말하고 있었다 : '깨끗한'grails는 windows 재부팅과 거의 같다 ... 거의 모든 이상한 행동을 치료한다 ... – Guillaume

4

테스트에서 도메인 객체를 저장할 때 flush 및 failOnError 플래그를 true로 설정하는 것이 좋습니다. 'flush : true'는 객체가 즉시 저장되도록합니다. failOnError 검증 오류가 없으면 객체가 저장되지 않고 쉽게 누락 될 수 있습니다. 당신이

domainObject.save(validate: false)

Grails domain object save docs for full information

관련 문제