2012-08-23 149 views
2

我在我的grails項目中有一個服務類方法,它使用一個輔助類來將響應作爲xml獲取。然後將xml作爲服務類方法的響應發送出去。Groovy-grails嘲笑問題。無法模擬

服務類: -

class ItemService{ 
def getItem(Number) { 
     def HelperClass helper = new HelperClass() 
     def responseXml = helper.getMessage(Number)     
     return responseXml 
    } 
} 

我編寫測試用例這種方法。在我的測試情況下,我想嘲笑

def responseXml = helper.getMessage(Number) 

,我至今寫測試用例是:

class ItemServiceTest extends GroovyTestCase { 
public final void testFindItem(){ 
     def service = new ItemService() 

     def xml = "<Item><Number>123</Number></Item>" 

     def mockJobServiceFactory = new MockFor(HelperClass) 
     mockJobServiceFactory.demand.getMessage{ def str -> 
      return xml 
     } 
     service.getItem().HelperClass = mockJobServiceFactory.proxyInstance() 

     def item = service.getItem()("123") 
     assertNotNull(item) 
    } 

但儘管如此,模擬不回,我在測試speicified的XML案件。 您在上述方法中看到的任何問題?...高級謝謝

回答

2

當您使用MockFor模擬對象時,您需要圍繞在use閉包中使用模擬的代碼。試試這個:

def service = new ItemService() 

def xml = "<Item><Number>123</Number></Item>" 

def mockJobServiceFactory = new MockFor(HelperClass) 
mockJobServiceFactory.demand.getMessage{ def str -> 
    return xml 
} 

mockJobServiceFactory.use { 
    def item = service.getItem()("123") 
    assertNotNull(item) 
} 
+0

奏效...感謝.. – Npa

+0

但我確實有一些測試情況下,我沒有使用「封使用」跟着我前面提到的方法。但是,嘲笑在這些情況下正確運作。在這裏看起來有些奇怪 – Npa

+0

'service.getItem()。HelperClass = mockJobServiceFactory.proxyInstance()'這行是錯誤的。你不能給方法的局部變量的值或類分配一些東西。在其他情況下,您可能可以手動注入代理,但爲了模擬局部變量,您需要使用閉包。 – ataylor