19
19
import static org .assertj .core .api .Assertions .assertThat ;
20
20
import static org .assertj .core .api .Assertions .assertThatExceptionOfType ;
21
21
import static org .mockito .ArgumentMatchers .any ;
22
+ import static org .mockito .BDDMockito .willAnswer ;
22
23
import static org .mockito .Mockito .mock ;
23
24
import static org .mockito .Mockito .never ;
25
+ import static org .mockito .Mockito .times ;
24
26
import static org .mockito .Mockito .verify ;
25
27
26
28
import java .util .LinkedList ;
31
33
import java .util .concurrent .TimeUnit ;
32
34
33
35
import org .junit .Test ;
36
+ import org .mockito .ArgumentCaptor ;
34
37
import org .mockito .Mockito ;
35
38
import org .reactivestreams .Subscriber ;
36
39
import org .reactivestreams .Subscription ;
@@ -160,31 +163,17 @@ public void onComplete() {
160
163
public void testReactiveStreamsConsumerPollableChannel () throws InterruptedException {
161
164
QueueChannel testChannel = new QueueChannel ();
162
165
163
- BlockingQueue <Message <?>> messages = new LinkedBlockingQueue <>();
164
-
165
- Subscriber <Message <?>> testSubscriber = Mockito .spy (new Subscriber <Message <?>>() {
166
-
167
- @ Override
168
- public void onSubscribe (Subscription subscription ) {
169
- subscription .request (2 );
170
- }
171
-
172
- @ Override
173
- public void onNext (Message <?> message ) {
174
- messages .offer (message );
175
- }
176
-
177
- @ Override
178
- public void onError (Throwable t ) {
166
+ Subscriber <Message <?>> testSubscriber = (Subscriber <Message <?>>) Mockito .mock (Subscriber .class );
179
167
180
- }
168
+ BlockingQueue < Message <?>> messages = new LinkedBlockingQueue <>();
181
169
182
- @ Override
183
- public void onComplete () {
170
+ willAnswer (i -> {
171
+ messages .put (i .getArgument (0 ));
172
+ return null ;
173
+ })
174
+ .given (testSubscriber )
175
+ .onNext (any (Message .class ));
184
176
185
- }
186
-
187
- });
188
177
ReactiveStreamsConsumer reactiveConsumer = new ReactiveStreamsConsumer (testChannel , testSubscriber );
189
178
reactiveConsumer .setBeanFactory (mock (BeanFactory .class ));
190
179
reactiveConsumer .afterPropertiesSet ();
@@ -193,6 +182,12 @@ public void onComplete() {
193
182
Message <?> testMessage = new GenericMessage <>("test" );
194
183
testChannel .send (testMessage );
195
184
185
+ ArgumentCaptor <Subscription > subscriptionArgumentCaptor = ArgumentCaptor .forClass (Subscription .class );
186
+ verify (testSubscriber ).onSubscribe (subscriptionArgumentCaptor .capture ());
187
+ Subscription subscription = subscriptionArgumentCaptor .getValue ();
188
+
189
+ subscription .request (1 );
190
+
196
191
Message <?> message = messages .poll (10 , TimeUnit .SECONDS );
197
192
assertThat (message ).isSameAs (testMessage );
198
193
@@ -203,6 +198,11 @@ public void onComplete() {
203
198
204
199
reactiveConsumer .start ();
205
200
201
+ verify (testSubscriber , times (2 )).onSubscribe (subscriptionArgumentCaptor .capture ());
202
+ subscription = subscriptionArgumentCaptor .getValue ();
203
+
204
+ subscription .request (2 );
205
+
206
206
Message <?> testMessage2 = new GenericMessage <>("test2" );
207
207
208
208
testChannel .send (testMessage2 );
0 commit comments