2014-02-18 121 views
1

我執行一個簡單的測試,但由於服務豆未能注入測試類測試失敗。下面是我的測試類無法注入服務類Grails的單元測試 - 測試失敗

class QuoteServiceTests extends GrailsUnitTestCase { 

     def quoteService 
    void testStaticQuote() { 
     def staticQuote = quoteService.getStaticQuote() 

     assertEquals("Messi", staticQuote.author) 
     assertEquals("Watch me today against Man-City", staticQuote.content) 
    } 
} 

我的測試失敗,以下錯誤

Cannot invoke method getStaticQuote() on null object 
java.lang.NullPointerException: Cannot invoke method getStaticQuote() on null object 
at qotd.QuoteServiceTests.testStaticQuote(QuoteServiceTests.groovy:9) 
+1

哪個版本的Grails? – dmahapatro

+0

Grails版本是1.3.5 –

回答

3

假設你正在使用的版本2(和JUnit而不是斯波克)之前,你需要手動添加的服務:

class QuoteServiceTests extends GrailsUnitTestCase { 
    def quoteService 

    void setUp() { 
     quoteService = new QuoteService() 
    } 

    void testStaticQuote() { 
     def staticQuote = quoteService.getStaticQuote() 
     // ... 

如果您在使用Grails 2或更高版本,那麼你就需要一個註解:

@TestFor(QuoteService) // Allows you to call the QuoteService via 'service' 
class QuoteServiceTests { 
    void testStaticQuote() { 
     def staticQuote = service.getStaticQuote() 
     // ... 
+0

但這不是依賴注入...?我的意思是版本<2 –

+0

@ProgrammerKhan不,它不是。你需要依賴注入嗎?你可以這樣做:https://stackoverflow.com/questions/12302880/inject-services-in-grails-unit-test,但我更喜歡上面,如果你需要修改QuoteService(即嘲諷相關服務)的方法,它會在每次測試運行前重置。雖然我猜我不知道依賴注入是否也能做到這一點。 – Igor

+0

好的,謝謝你@Sneaky,BTW我無法理解在鏈接https://stackoverflow.com/questions/12302880/inject-services-in-grails-unit-test%E2%80%8C%E2%的例子請給我80%8B的解釋嗎? –