0 votes
1 view
in Java by (10.2k points)

Is there a way to have a stubbed method return different objects on subsequent invocations? I'd like to do this to test nondeterminate responses from an ExecutorCompletionService. i.e. to test that irrespective of the return order of the methods, the outcome remains constant.

The code I'm looking to test looks something like this.

// Create an completion service so we can group these tasks together

ExecutorCompletionService<T> completionService =

        new ExecutorCompletionService<T>(service);

// Add all these tasks to the completion service

for (Callable<T> t : ts)

    completionService.submit(request);

// As an when each call finished, add it to the response set.

for (int i = 0; i < calls.size(); i ++) {

    try {

        T t = completionService.take().get();

        // do some stuff that I want to test

    } catch (...) { }        

}

1 Answer

0 votes
by (46.1k points)

You can do that by practicing the thenAnswer method (when chaining with when):

when(someMock.someMethod()).thenAnswer(new Answer() {

    private int count = 0;

    public Object answer(InvocationOnMock invocation) {

        if (count++ == 1)

            return 1;

        return 2;

    }

});

Or by applying the equivalent, static doAnswer method:

doAnswer(new Answer() {

    private int count = 0;

    public Object answer(InvocationOnMock invocation) {

        if (count++ == 1)

            return 1;

        return 2;

    }

}).when(someMock).someMethod();

Related questions

0 votes
1 answer
0 votes
1 answer
0 votes
1 answer
Welcome to Intellipaat Community. Get your technical queries answered by top developers !


Categories

...