Chris Claxton
Chris Claxton

Reputation: 523

Grails service injection into integration test

I have a very simple Grails Service:

class UserService {
    def returnHi() { return "Hi" }    
}

I'm trying to get access to the service in an integration test, like this:

def testService() {
  UserService userService
  assertEquals( "Hi", userService.returnHi() )
}

Why do I get the failure: java.lang.NullPointerException: Cannot invoke method returnHi() on null object?

Thanks for your time

Upvotes: 0

Views: 2746

Answers (2)

practical programmer
practical programmer

Reputation: 1648

It's enough to put 'def userService' as your class field instead of putting in inside of the method. In integration tests, beans are injected the same as in controllers, services and other beans.

Do something like:

class MyTests {
    def userService

    void serviceTest(){
        assert userService.returnHi(), 'Hi'
    }        
}

P.S. Make sure the name of the service is correct and written in camelCase.

Upvotes: 5

Chris Claxton
Chris Claxton

Reputation: 523

Add the following lines to the integration test file:

import org.codehaus.groovy.grails.commons.ApplicationHolder as AH
def userService = AH.application.mainContext.userService

as described here: Service is not getting injected into Grails domain class , Grails 2.0.0 and 2.0.3

Upvotes: 0

Related Questions