Stainedart
Stainedart

Reputation: 1979

Groovy unit test for overloaded method

Using the MockFor how can I write unit tests for overloaded methods.

For example

public HttpResponse execute(HttpUriRequest request, HttpContext context)

and

public HttpResponse execute(HttpHost target, HttpRequest request)

I have written:

        def responseMocker = new MockFor(HttpResponse.class)
        HttpResponse response = responseMocker.proxyInstance()
        def requestMocker = new MockFor(HttpUriRequest.class)
        def request = requestMocker.proxyInstance()
        def contextMocker = new MockFor(HttpContext.class)
        def context = contextMocker.proxyInstance();
        def clientMocker = new MockFor(HttpClient.class)
        clientMocker.demand.execute(request, context) { response }

        HttpClientSample client = new HttpClientSample(clientMocker.proxyInstance())

        assertEquals response, client.execute(request,context)

This test above fails with:

groovy.lang.MissingMethodException: No signature of method: ....

Upvotes: 1

Views: 888

Answers (1)

Andre Steingress
Andre Steingress

Reputation: 4411

You need to specify the demanded methods like this:

mock.demand.execute { HttpUriRequest request, HttpContext context -> ... }
mock.demand.execute { HttpHost target, HttpRequest request -> ... }

this will bind the demanded methods to the appropriate overloaded method signatures.

Upvotes: 2

Related Questions