1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/*
2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors
3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License.
4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */
5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito;
6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.stubbing.Answer;
8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.stubbing.OngoingStubbing;
9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.stubbing.Stubber;
10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/**
12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Behavior Driven Development style of writing tests uses <b>//given //when //then</b> comments as fundamental parts of your test methods.
13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This is exactly how we write our tests and we warmly encourage you to do so!
14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p>
15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Start learning about BDD here: <a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development">http://en.wikipedia.org/wiki/Behavior_Driven_Development</a>
16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p>
17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * The problem is that current stubbing api with canonical role of <b>when</b> word does not integrate nicely with <b>//given //when //then</b> comments.
18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * It's because stubbing belongs to <b>given</b> component of the test and not to the <b>when</b> component of the test.
19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Hence {@link BDDMockito} class introduces an alias so that you stub method calls with {@link BDDMockito#given(Object)} method.
20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Now it really nicely integrates with the <b>given</b> component of a BDD style test!
21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p>
22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Here is how the test might look like:
23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java">
24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * import static org.mockito.BDDMockito.*;
25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Seller seller = mock(Seller.class);
27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Shop shop = new Shop(seller);
28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * public void shouldBuyBread() throws Exception {
30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *   //given
31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *   given(seller.askForBread()).willReturn(new Bread());
32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *   //when
34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *   Goods goods = shop.buyBread();
35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *   //then
37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *   assertThat(goods, containBread());
38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * }
39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre>
40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Stubbing voids with throwables:
42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java">
43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *   //given
44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *   willThrow(new RuntimeException("boo")).given(mock).foo();
45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *   //when
47e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *   Result result = systemUnderTest.perform();
48e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
49e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *   //then
50e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *   assertEquals(failure, result);
51e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre>
52e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p>
53e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * One of the purposes of BDDMockito is also to show how to tailor the mocking syntax to a different programming style.
54e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
55e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @since 1.8.0
56e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */
57e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson@SuppressWarnings("unchecked")
58e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class BDDMockito extends Mockito {
59e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
60e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
61e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * See original {@link OngoingStubbing}
62e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @since 1.8.0
63e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
64e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public static interface BDDMyOngoingStubbing<T> {
65e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
66e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /**
67e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * See original {@link OngoingStubbing#thenAnswer(Answer)}
68e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @since 1.8.0
69e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
70e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        BDDMyOngoingStubbing<T> willAnswer(Answer<?> answer);
71e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
72e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /**
73e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * See original {@link OngoingStubbing#then(Answer)}
74e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @since 1.9.0
75e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
76e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        BDDMyOngoingStubbing<T> will(Answer<?> answer);
77e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
78e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /**
79e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * See original {@link OngoingStubbing#thenReturn(Object)}
80e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @since 1.8.0
81e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
82e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        BDDMyOngoingStubbing<T> willReturn(T value);
83e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
84e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /**
85e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * See original {@link OngoingStubbing#thenReturn(Object, Object[])}
86e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @since 1.8.0
87e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
88e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        BDDMyOngoingStubbing<T> willReturn(T value, T... values);
89e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
90e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /**
91e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * See original {@link OngoingStubbing#thenThrow(Throwable...)}
92e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @since 1.8.0
93e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
94e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        BDDMyOngoingStubbing<T> willThrow(Throwable... throwables);
95e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
96e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /**
97e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * See original {@link OngoingStubbing#thenThrow(Class[])}
98e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @since 1.9.0
99e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
100e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        BDDMyOngoingStubbing<T> willThrow(Class<? extends Throwable>... throwableClasses);
101e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
102e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /**
103e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * See original {@link OngoingStubbing#thenCallRealMethod()}
104e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @since 1.9.0
105e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
106e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        BDDMyOngoingStubbing<T> willCallRealMethod();
107e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
108e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /**
109e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * See original {@link OngoingStubbing#getMock()}
110e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @since 1.9.0
111e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
112e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        <M> M getMock();
113e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
114e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
115e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public static class BDDOngoingStubbingImpl<T> implements BDDMyOngoingStubbing<T> {
116e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
117e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        private final OngoingStubbing<T> mockitoOngoingStubbing;
118e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
119e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public BDDOngoingStubbingImpl(OngoingStubbing<T> ongoingStubbing) {
120e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            this.mockitoOngoingStubbing = ongoingStubbing;
121e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
122e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
123e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /* (non-Javadoc)
124e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @see BDDMockito.BDDMyOngoingStubbing#willAnswer(Answer)
125e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
126e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public BDDMyOngoingStubbing<T> willAnswer(Answer<?> answer) {
127e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return new BDDOngoingStubbingImpl<T>(mockitoOngoingStubbing.thenAnswer(answer));
128e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
129e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
130e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /* (non-Javadoc)
131e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @see BDDMockito.BDDMyOngoingStubbing#will(Answer)
132e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
133e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public BDDMyOngoingStubbing<T> will(Answer<?> answer) {
134e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return new BDDOngoingStubbingImpl<T>(mockitoOngoingStubbing.then(answer));
135e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
136e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
137e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /* (non-Javadoc)
138e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @see BDDMockito.BDDMyOngoingStubbing#willReturn(java.lang.Object)
139e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
140e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public BDDMyOngoingStubbing<T> willReturn(T value) {
141e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return new BDDOngoingStubbingImpl<T>(mockitoOngoingStubbing.thenReturn(value));
142e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
143e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
144e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /* (non-Javadoc)
145e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @see BDDMockito.BDDMyOngoingStubbing#willReturn(java.lang.Object, T[])
146e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
147e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public BDDMyOngoingStubbing<T> willReturn(T value, T... values) {
148e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return new BDDOngoingStubbingImpl<T>(mockitoOngoingStubbing.thenReturn(value, values));
149e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
150e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
151e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /* (non-Javadoc)
152e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @see BDDMockito.BDDMyOngoingStubbing#willThrow(java.lang.Throwable[])
153e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
154e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public BDDMyOngoingStubbing<T> willThrow(Throwable... throwables) {
155e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return new BDDOngoingStubbingImpl<T>(mockitoOngoingStubbing.thenThrow(throwables));
156e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
157e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /* (non-Javadoc)
158e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @see BDDMockito.BDDMyOngoingStubbing#willThrow(java.lang.Class[])
159e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
160e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public BDDMyOngoingStubbing<T> willThrow(Class<? extends Throwable>... throwableClasses) {
161e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return new BDDOngoingStubbingImpl<T>(mockitoOngoingStubbing.thenThrow(throwableClasses));
162e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
163e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
164e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public BDDMyOngoingStubbing<T> willCallRealMethod() {
165e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return new BDDOngoingStubbingImpl<T>(mockitoOngoingStubbing.thenCallRealMethod());
166e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
167e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
168e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public <M> M getMock() {
169e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return (M) mockitoOngoingStubbing.getMock();
170e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
171e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
172e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
173e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
174e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * see original {@link Mockito#when(Object)}
175e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @since 1.8.0
176e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
177e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public static <T> BDDMyOngoingStubbing<T> given(T methodCall) {
178e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        return new BDDOngoingStubbingImpl<T>(Mockito.when(methodCall));
179e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
180e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
181e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
182e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * See original {@link Stubber}
183e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @since 1.8.0
184e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
185e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public static interface BDDStubber {
186e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /**
187e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * See original {@link Stubber#doAnswer(Answer)}
188e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @since 1.8.0
189e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
190e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        BDDStubber willAnswer(Answer answer);
191e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
192e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /**
193e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * See original {@link Stubber#doNothing()}
194e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @since 1.8.0
195e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
196e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        BDDStubber willNothing();
197e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
198e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /**
199e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * See original {@link Stubber#doReturn(Object)}
200e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @since 1.8.0
201e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
202e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        BDDStubber willReturn(Object toBeReturned);
203e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
204e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /**
205e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * See original {@link Stubber#doThrow(Throwable)}
206e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @since 1.8.0
207e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
208e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        BDDStubber willThrow(Throwable toBeThrown);
209e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
210e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /**
211e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * See original {@link Stubber#doThrow(Class)}
212e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @since 1.9.0
213e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
214e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        BDDStubber willThrow(Class<? extends Throwable> toBeThrown);
215e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
216e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /**
217e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * See original {@link Stubber#doCallRealMethod()}
218e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @since 1.9.0
219e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
220e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        BDDStubber willCallRealMethod();
221e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
222e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /**
223e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * See original {@link Stubber#when(Object)}
224e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @since 1.8.0
225e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
226e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        <T> T given(T mock);
227e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
228e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
229e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public static class BDDStubberImpl implements BDDStubber {
230e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
231e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        private final Stubber mockitoStubber;
232e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
233e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public BDDStubberImpl(Stubber mockitoStubber) {
234e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            this.mockitoStubber = mockitoStubber;
235e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
236e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
237e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /* (non-Javadoc)
238e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @see BDDMockito.BDDStubber#given(java.lang.Object)
239e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
240e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public <T> T given(T mock) {
241e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return mockitoStubber.when(mock);
242e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
243e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
244e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /* (non-Javadoc)
245e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @see BDDMockito.BDDStubber#willAnswer(Answer)
246e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
247e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public BDDStubber willAnswer(Answer answer) {
248e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return new BDDStubberImpl(mockitoStubber.doAnswer(answer));
249e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
250e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
251e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /* (non-Javadoc)
252e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @see BDDMockito.BDDStubber#willNothing()
253e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
254e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public BDDStubber willNothing() {
255e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return new BDDStubberImpl(mockitoStubber.doNothing());
256e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
257e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
258e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /* (non-Javadoc)
259e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @see BDDMockito.BDDStubber#willReturn(java.lang.Object)
260e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
261e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public BDDStubber willReturn(Object toBeReturned) {
262e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return new BDDStubberImpl(mockitoStubber.doReturn(toBeReturned));
263e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
264e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
265e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /* (non-Javadoc)
266e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @see BDDMockito.BDDStubber#willThrow(java.lang.Throwable)
267e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
268e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public BDDStubber willThrow(Throwable toBeThrown) {
269e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return new BDDStubberImpl(mockitoStubber.doThrow(toBeThrown));
270e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
271e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
272e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /* (non-Javadoc)
273e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @see BDDMockito.BDDStubber#willThrow(Class)
274e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
275e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public BDDStubber willThrow(Class<? extends Throwable> toBeThrown) {
276e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return new BDDStubberImpl(mockitoStubber.doThrow(toBeThrown));
277e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
278e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
279e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        /* (non-Javadoc)
280e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         * @see BDDMockito.BDDStubber#willCallRealMethod()
281e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson         */
282e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        public BDDStubber willCallRealMethod() {
283e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return new BDDStubberImpl(mockitoStubber.doCallRealMethod());
284e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
285e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
286e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
287e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
288e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * see original {@link Mockito#doThrow(Throwable)}
289e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @since 1.8.0
290e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
291e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public static BDDStubber willThrow(Throwable toBeThrown) {
292e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        return new BDDStubberImpl(Mockito.doThrow(toBeThrown));
293e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
294e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
295e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
296e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * see original {@link Mockito#doThrow(Throwable)}
297e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @since 1.9.0
298e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
299e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public static BDDStubber willThrow(Class<? extends Throwable> toBeThrown) {
300e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        return new BDDStubberImpl(Mockito.doThrow(toBeThrown));
301e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
302e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
303e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
304e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * see original {@link Mockito#doAnswer(Answer)}
305e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @since 1.8.0
306e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
307e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public static BDDStubber willAnswer(Answer answer) {
308e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        return new BDDStubberImpl(Mockito.doAnswer(answer));
309e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
310e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
311e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
312e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * see original {@link Mockito#doNothing()}
313e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @since 1.8.0
314e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
315e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public static BDDStubber willDoNothing() {
316e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        return new BDDStubberImpl(Mockito.doNothing());
317e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
318e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
319e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
320e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * see original {@link Mockito#doReturn(Object)}
321e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @since 1.8.0
322e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
323e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public static BDDStubber willReturn(Object toBeReturned) {
324e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        return new BDDStubberImpl(Mockito.doReturn(toBeReturned));
325e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
326e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
327e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
328e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * see original {@link Mockito#doCallRealMethod()}
329e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @since 1.8.0
330e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
331e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public static BDDStubber willCallRealMethod() {
332e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        return new BDDStubberImpl(Mockito.doCallRealMethod());
333e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
334e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}
335