2012-10-17 3 views
2

Grails (1.3.6)에서 단위 테스트를 시도하는 데 문제가 있습니다.Grails : 조롱 된 서비스에서 조롱 된 객체 반환

서비스에는 개체를 만드는 데 사용하는 다른 서비스의 인스턴스가 있습니다. 저는 제작자 서비스와 그것이 반환하는 객체를 조롱하려고합니다. 테스트 클래스에서

:

mockMyService = new MyService() // service under test 

// Fake Asset object to 'create' 
asset = mockFor(Asset) 
asset.createMock() 

// Mock the CreatorService and return the mocked asset 
mockCreatorService = mockFor(CreatorService) 
mockCreatorService.demand.generateAsset(){Section s, Date d, User u, AssetStatus a, String name -> return asset} 

mockMyService = new MyService() 
mockMyService.assetService = mockCreatorService.createMock() 

디버깅에서와 검사 나는 모의 개체가 확인 생성되고 서비스가 제대로하고 generateAsset 호출을 날조 조롱 것을 상당히 확신합니다.

이면 MyService에서 다른 (창조자) 서비스에 대한 호출은 다음과 같습니다

Asset asset = creatorService.generateAsset(section, date, author, status, assetName) 

이 오류를 받고 있어요 :

클래스와 객체 [email protected] '을 시전 할 수 없습니다 'grails.test.GrailsMock'to class 'com.xxxxxx.Asset

저는 생각하기에 MyService가 generateAsset을 호출 할 때 조롱 된 Asset을 할당했기 때문입니다.

누구든지이 문제에 관해 밝힐 수 있습니까? 그 이유가 임무에 의한 것이라면, 그 주위에 방법이 있습니까? 아니면 내가 잘못 접근하고 있거나 분명히 뭔가 놓쳤습니다.

Grails 1.3.6 (잠시 동안 Grails 2에 대한 포트가 완료되지 않으므로 잠시 동안이 버전에 고정되어 있습니다).

감사합니다.

업데이트 :

OK 그래서 난 같은 조롱 개체를 선언함으로써 캐스트 예외가 주위에있어 : ​​

def testAssets = [ 
new Asset(id:123, name:......)] 
mockDomain(Asset, testAssets) 

을하지만 지금은 내가 모든 null이 아닌 속성을 선언해야 할 것 같습니다 테스트 자산. 이것은 옳지 않은 것처럼 보입니다. 테스트를 위해 이드와 별개로 애셋을 전혀 신경 쓰지 않습니다.

답변

3

귀하의 조롱 generateAsset() 방법은 없습니다 asset합니다 (mockFor(Asset))을 반환해야하지만 값 대신 당신은 createMock()를 호출 돌아 왔을 : 도움이 보인다

// Fake Asset object to 'create' 
mockAsset = mockFor(Asset) 
def asset = mockAsset.createMock() 

// Mock the CreatorService and return the mocked asset 
mockCreatorService = mockFor(CreatorService) 
mockCreatorService.demand.generateAsset(){Section s, Date d, User u, AssetStatus a, String name -> return asset} 
+0

감사합니다. 내가 어떻게 그것을 놓쳤는 지 잘 모르겠다. 지금은 추가 오류가 발생하고 있지만 generateAsset이 호출 된 후 CreatorService의 조롱 된 객체에 대한 호출이 있으므로이를 알아야 할 필요가 있다고 생각합니다. 감사! – spacebot

+0

예,'mockAsset'에 적절한 요구 사항을 추가해야합니다. –

관련 문제