12637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin/*
22637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * Copyright (c) 2007 Mockito contributors
32637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * This program is made available under the terms of the MIT License.
42637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin */
52637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpackage org.mockitousage.stubbing;
62637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
72637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.assertj.core.api.Assertions.assertThat;
82637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.AdditionalAnswers.answer;
92637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.AdditionalAnswers.answerVoid;
102637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.AdditionalAnswers.returnsArgAt;
112637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.AdditionalAnswers.returnsFirstArg;
122637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.AdditionalAnswers.returnsLastArg;
132637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.AdditionalAnswers.returnsSecondArg;
142637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.BDDMockito.any;
152637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.BDDMockito.anyInt;
162637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.BDDMockito.anyObject;
172637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.BDDMockito.anyString;
182637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.BDDMockito.anyVararg;
192637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.BDDMockito.eq;
202637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.BDDMockito.given;
212637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.BDDMockito.mock;
222637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.BDDMockito.times;
232637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.BDDMockito.verify;
242637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.junit.Test;
252637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.junit.runner.RunWith;
262637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.Mock;
272637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.junit.MockitoJUnitRunner;
282637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.stubbing.Answer1;
292637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.stubbing.Answer2;
302637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.stubbing.Answer3;
312637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.stubbing.Answer4;
322637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.stubbing.Answer5;
332637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.stubbing.VoidAnswer1;
342637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.stubbing.VoidAnswer2;
352637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.stubbing.VoidAnswer3;
362637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.stubbing.VoidAnswer4;
372637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.stubbing.VoidAnswer5;
382637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockitousage.IMethods;
392637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
402637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin@RunWith(MockitoJUnitRunner.class)
412637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpublic class StubbingWithAdditionalAnswersTest {
422637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
432637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Mock IMethods iMethods;
442637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
452637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
462637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void can_return_arguments_of_invocation() throws Exception {
472637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.objectArgMethod(anyObject())).will(returnsFirstArg());
482637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.threeArgumentMethod(eq(0), anyObject(), anyString())).will(returnsSecondArg());
492637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.threeArgumentMethod(eq(1), anyObject(), anyString())).will(returnsLastArg());
502637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
512637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        assertThat(iMethods.objectArgMethod("first")).isEqualTo("first");
522637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        assertThat(iMethods.threeArgumentMethod(0, "second", "whatever")).isEqualTo("second");
532637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        assertThat(iMethods.threeArgumentMethod(1, "whatever", "last")).isEqualTo("last");
542637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
552637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
562637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
572637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void can_return_expanded_arguments_of_invocation() throws Exception {
582637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.varargsObject(eq(1), anyVararg())).will(returnsArgAt(3));
592637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
602637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        assertThat(iMethods.varargsObject(1, "bob", "alexander", "alice", "carl")).isEqualTo("alice");
612637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
622637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
632637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
642637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void can_return_primitives_or_wrappers() throws Exception {
652637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.toIntPrimitive(anyInt())).will(returnsFirstArg());
662637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.toIntWrapper(anyInt())).will(returnsFirstArg());
672637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
682637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        assertThat(iMethods.toIntPrimitive(1)).isEqualTo(1);
692637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        assertThat(iMethods.toIntWrapper(1)).isEqualTo(1);
702637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
712637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
722637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
732637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void can_return_based_on_strongly_types_one_parameter_function() throws Exception {
742637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.simpleMethod(anyString()))
752637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                .will(answer(new Answer1<String, String>() {
762637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    public String answer(String s) {
772637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                        return s;
782637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    }
792637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                }));
802637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
812637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        assertThat(iMethods.simpleMethod("string")).isEqualTo("string");
822637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
832637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
842637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
852637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void will_execute_a_void_based_on_strongly_typed_one_parameter_function() throws Exception {
862637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        final IMethods target = mock(IMethods.class);
872637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
882637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.simpleMethod(anyString()))
892637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                .will(answerVoid(new VoidAnswer1<String>() {
902637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    public void answer(String s) {
912637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                        target.simpleMethod(s);
922637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    }
932637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                }));
942637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
952637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        // invoke on iMethods
962637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        iMethods.simpleMethod("string");
972637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
982637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        // expect the answer to write correctly to "target"
992637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        verify(target, times(1)).simpleMethod("string");
1002637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
1012637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1022637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
1032637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void can_return_based_on_strongly_typed_two_parameter_function() throws Exception {
1042637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.simpleMethod(anyString(), anyInt()))
1052637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            .will(answer(new Answer2<String, String, Integer>() {
1062637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                public String answer(String s, Integer i) {
1072637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    return s + "-" + i;
1082637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                }
1092637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            }));
1102637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1112637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        assertThat(iMethods.simpleMethod("string",1)).isEqualTo("string-1");
1122637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
1132637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1142637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
1152637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void will_execute_a_void_based_on_strongly_typed_two_parameter_function() throws Exception {
1162637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        final IMethods target = mock(IMethods.class);
1172637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1182637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.simpleMethod(anyString(), anyInt()))
1192637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            .will(answerVoid(new VoidAnswer2<String, Integer>() {
1202637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                public void answer(String s, Integer i) {
1212637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    target.simpleMethod(s, i);
1222637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                }
1232637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            }));
1242637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1252637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        // invoke on iMethods
1262637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        iMethods.simpleMethod("string",1);
1272637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1282637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        // expect the answer to write correctly to "target"
1292637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        verify(target, times(1)).simpleMethod("string", 1);
1302637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
1312637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1322637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
1332637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void can_return_based_on_strongly_typed_three_parameter_function() throws Exception {
1342637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        final IMethods target = mock(IMethods.class);
1352637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.threeArgumentMethodWithStrings(anyInt(), anyString(), anyString()))
1362637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                .will(answer(new Answer3<String, Integer, String, String>() {
1372637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    public String answer(Integer i, String s1, String s2) {
1382637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                        target.threeArgumentMethodWithStrings(i, s1, s2);
1392637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                        return "answered";
1402637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    }
1412637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                }));
1422637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1432637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        assertThat(iMethods.threeArgumentMethodWithStrings(1, "string1", "string2")).isEqualTo("answered");
1442637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        verify(target, times(1)).threeArgumentMethodWithStrings(1, "string1", "string2");
1452637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
1462637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1472637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
1482637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void will_execute_a_void_based_on_strongly_typed_three_parameter_function() throws Exception {
1492637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        final IMethods target = mock(IMethods.class);
1502637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1512637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.threeArgumentMethodWithStrings(anyInt(), anyString(), anyString()))
1522637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                .will(answerVoid(new VoidAnswer3<Integer, String, String>() {
1532637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    public void answer(Integer i, String s1, String s2) {
1542637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                        target.threeArgumentMethodWithStrings(i, s1, s2);
1552637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    }
1562637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                }));
1572637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1582637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        // invoke on iMethods
1592637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        iMethods.threeArgumentMethodWithStrings(1, "string1", "string2");
1602637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1612637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        // expect the answer to write correctly to "target"
1622637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        verify(target, times(1)).threeArgumentMethodWithStrings(1, "string1", "string2");
1632637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
1642637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1652637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
1662637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        public void can_return_based_on_strongly_typed_four_parameter_function() throws Exception {
1672637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        final IMethods target = mock(IMethods.class);
1682637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.fourArgumentMethod(anyInt(), anyString(), anyString(), any(boolean[].class)))
1692637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                .will(answer(new Answer4<String, Integer, String, String, boolean[]>() {
1702637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    public String answer(Integer i, String s1, String s2, boolean[] a) {
1712637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                        target.fourArgumentMethod(i, s1, s2, a);
1722637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                        return "answered";
1732637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    }
1742637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                }));
1752637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1762637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        boolean[] booleanArray = { true, false };
1772637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        assertThat(iMethods.fourArgumentMethod(1, "string1", "string2", booleanArray)).isEqualTo("answered");
1782637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        verify(target, times(1)).fourArgumentMethod(1, "string1", "string2", booleanArray);
1792637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
1802637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1812637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
1822637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void will_execute_a_void_based_on_strongly_typed_four_parameter_function() throws Exception {
1832637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        final IMethods target = mock(IMethods.class);
1842637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1852637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.fourArgumentMethod(anyInt(), anyString(), anyString(), any(boolean[].class)))
1862637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                .will(answerVoid(new VoidAnswer4<Integer, String, String, boolean[]>() {
1872637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    public void answer(Integer i, String s1, String s2, boolean[] a) {
1882637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                        target.fourArgumentMethod(i, s1, s2, a);
1892637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    }
1902637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                }));
1912637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1922637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        // invoke on iMethods
1932637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        boolean[] booleanArray = { true, false };
1942637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        iMethods.fourArgumentMethod(1, "string1", "string2", booleanArray);
1952637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1962637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        // expect the answer to write correctly to "target"
1972637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        verify(target, times(1)).fourArgumentMethod(1, "string1", "string2", booleanArray);
1982637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
1992637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
2002637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
2012637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void can_return_based_on_strongly_typed_five_parameter_function() throws Exception {
2022637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        final IMethods target = mock(IMethods.class);
2032637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.simpleMethod(anyString(), anyInt(), anyInt(), anyInt(), anyInt()))
2042637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                .will(answer(new Answer5<String, String, Integer, Integer, Integer, Integer>() {
2052637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    public String answer(String s1, Integer i1, Integer i2, Integer i3, Integer i4) {
2062637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                        target.simpleMethod(s1, i1, i2, i3, i4);
2072637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                        return "answered";
2082637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    }
2092637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                }));
2102637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
2112637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        assertThat(iMethods.simpleMethod("hello", 1, 2, 3, 4)).isEqualTo("answered");
2122637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        verify(target, times(1)).simpleMethod("hello", 1, 2, 3, 4);
2132637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
2142637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
2152637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
2162637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void will_execute_a_void_based_on_strongly_typed_five_parameter_function() throws Exception {
2172637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        final IMethods target = mock(IMethods.class);
2182637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
2192637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        given(iMethods.simpleMethod(anyString(), anyInt(), anyInt(), anyInt(), anyInt()))
2202637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                .will(answerVoid(new VoidAnswer5<String, Integer, Integer, Integer, Integer>() {
2212637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    public void  answer(String s1, Integer i1, Integer i2, Integer i3, Integer i4) {
2222637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                        target.simpleMethod(s1, i1, i2, i3, i4);
2232637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                    }
2242637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                }));
2252637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
2262637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        // invoke on iMethods
2272637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        iMethods.simpleMethod("hello", 1, 2, 3, 4);
2282637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
2292637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        // expect the answer to write correctly to "target"
2302637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        verify(target, times(1)).simpleMethod("hello", 1, 2, 3, 4);
2312637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
2322637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
2332637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin}
234