2014-02-18 88 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的解释吗? –