4

I have some Grails production code I'd like to test and I've seen some examples of that here, see below. Problem is that I run into MissimgMethodExceptions on the client part of the HttpBuilder. This is the production code I'd like to test:

class RunkeeperActivitiesRetrieverService {
    def http = new RESTClient("http://api.runkeeper.com/")

    def getActivities() {
        http.client.clearRequestInterceptors();
        http.client.addRequestInterceptor(new HttpRequestInterceptor() {
            void process(HttpRequest httpRequest, HttpContext httpContext) {
                httpRequest.addHeader('Authorization', 'Bearer xxxxxxxxxx')
            }
        })
        //Do more with the httpBuilder
    }
}

I found some help on the topic of mocking the HTTPBuilder here: Groovy HTTPBuilder Mocking the Response and some on mocking interfaces in the groovy docs here: http://groovy.codehaus.org/Groovy+way+to+implement+interfaces

Using that code I came to this test code:

def mock = new MockFor(HTTPBuilder)
def impl = [
    addRequestInterceptor : {HttpRequestInterceptor interceptor -> println "hi 4"+interceptor},
    clearRequestInterceptors : {println "hi 88"}
            ]
def client = impl as HttpClient

mock.demand.getClient {return client}
mock.use{
    service.http = new HTTPBuilder()
    println service.getActivities()
}

Unfortunately my knowledge of Groovy is too limited to solve the exception that is thrown: groovy.lang.MissingMethodException: No signature of method: $Proxy15.clearRequestInterceptors() is applicable for argument types: () values: []

What am I missing here?

Community
  • 1
  • 1
SunSear
  • 230
  • 4
  • 9

1 Answers1

1

You're casting impl to HttpClient - it doesn't appear the method in question is defined on that interface. Perhaps you mean to use some subclass of AbstractHttpClient.

Brian Henry
  • 3,161
  • 1
  • 16
  • 17