Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
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 (46k 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
asked Sep 30, 2019 in Java by Anvi (10.2k points)
0 votes
1 answer
0 votes
1 answer
0 votes
1 answer

Browse Categories

...