2010-02-16 63 views
6

我在測試運行時依賴於其他服務的應用程序的服務。測試時,依賴注入似乎不起作用。運行集成測試時,依賴注入在Grails artefact中起作用嗎?Grails集成測試中的依賴注入

回答

8

是的,當運行測試(即集成目錄中的測試)時,應用程序啓動並且所有的bean都被創建並注入,就像應用程序實際運行一樣。測試應用程序和正在運行的應用程序之間的唯一區別應該是配置環境。

當然,如果你在你的測試中實例化一個需要使用'new'操作符注入的類,你將不會得到DI的好處。相反,爲bean創建測試用例屬性的測試,其結果將被注入:

class MyServiceTests extends GrailsUnitTestCase { 

    MyService service 

    void testInjection() { 
     assertNotNull service 
    } 
} 
+0

謝謝。我正在測試一項依賴於其他服務的服務,並且我正在對它進行實例化,正因爲如此,我沒有得到DI的好處。 – Lucas 2010-02-16 15:37:27

+2

只是一個側面說明。集成測試不應該根據版本擴展GrailsUnitTestCase,這可能會導致您的ConfigurationHolder.config爲空的嚴重問題。是的,許多版本的grails create-integration-test確實會創建一個擴展GrailsUnitTestCase的測試,但這是一個最近已經修復的bug。 – 2011-01-31 20:30:56

+0

爲什麼答案會說「當然,如果你實例化一個需要注射的類」你不會得到DI?爲什麼通常是這種情況?這對我來說並不明顯 - 儘管我痛苦地想出了它。 – 2012-11-25 01:09:16

4

對於那些使用Grails 1.3.7你,我發現,你不能用類名爲了讓依賴注入工作。相反,宣佈服務爲:

def myService 

然後發生DI魔術。通過1.3.7中的上述代碼,not null斷言將失敗。

+0

1.3.7以上。這在2.4.x中也是一個問題。另外,對於控制器集成測試,您必須實例化控制器:'def fooController = new FooController()' - 則依賴關係將被正確連接。 – 2015-09-25 18:09:20