2012-05-04 38 views
0

我正在編寫服務類的單元測試過程。這個服務級別呼叫MyDomain.findAllByIdNotInList。我面臨的問題是,Grails不會將NotInList識別爲模擬域的動態查找器。我嘗試了Metaclass這個功能,但遇到了問題。Grails單元測試Buggy動態查找器

任何創造性的方法可以繞過將單元測試轉換爲集成測試的這種短缺嗎?我想避免這種出於多種原因(時間運行,只有我們的單元測試在構建時運行等)

而且,有可能我metaclassing是寫得不好:

MyDomain.metaClass.findAllByIdNotInList = {ArrayList list -> 
     return [] 
    } 

編輯:使用grails 1.3.7。

也試過

MyDomain.metaClass.findAllByIdNotInList = {deflist -> 
     return [] 
    } 

錯誤報告在這裏:

http://jira.grails.org/browse/GRAILS-8593

+0

您是否導入了DomainClassUnitTestMixin?如果你還沒有http://grails.org/doc/latest/guide/testing.html#unitTestingDomains –

+0

請看看這個,因爲我使用的是1.3.7,Mixins不適用。發佈在jira.grails.org鏈接上的bug特定於1.3.7。 – Joseph

回答

2

@Sagar五世的評論是正確的,你應該能夠利用所有動態查找時域正確嘲笑。如果您在2.0之前使用的是Grails版本,則在嘗試調用動態查找器之前,必須先擴展GrailsUnitTestCase並調用MockDomain(MyDomain)。作爲一個供參考您的metaClassing不正確編寫(我認爲你應該使用模擬框架讓你的測試工作,我提供了正確的語法,以便將來可以正確使用它)。

MyDomain.metaClass.'static'.findAllByIdNotInList = {defList -> 
    [] 
} 

當你要替換的方法是static你需要添加.'static'.其間的metaClass和方法名。

+0

我忘了在元類和方法名稱之間添加.static。 JIRA指出的問題是,在1.3.7中調用'MockDomain'時,'NotInList'的動態查找器無法正確生成。需要元類來解決這個問題。 – Joseph