Reputation: 1979
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
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