Add MockMessageHandler to the Testing Framework
Fix PayloadMatcherTests for generics
Address PR comments and other improvements
* Revert `rawtypes` mode for the `PayloadMatcher`
* Make `HeaderMatcher` as `rawtypes` as well
* Make `MockMessageHandler` expect `rawtypes` for `Matcher`s.
This way we can just support `Matcher`s like `notNullValue(Message.class)`
* Rename `expect()` to `assertNext()`
* Rename `andReply()` to `thenReply()`
* Track replies are supplied in the `MockMessageHandler`
* Distinguish simple `MH` from the `MP` types in the
`MockIntegrationContext#instead()` do not let to replace simple `MH`
with fully configured `MockMessageHandler` or any other `MP` implementation.
Fail replace if types mismatch; wrap `MockMessageHandler` to simple `MH`
if it doesn't have replies when we are going to replace simple `MH`
* Wrap `MockMessageHandler` to the `Mockito.spy()` in the
`MockIntegration#mockMessageHandler()` to allow to `verify()` interaction
in the test-case
Remove wrapping `MockMH` to raw `MH` when no reply supported.
If `MockMH` isn't supplied with replies ti's safe to use it as is - no harm to target endpoint
which supposed to be last one in the flow
Some polishing and JavaDocs
More JavaDocs
Add docs for the `MockMessageHandler` and fix some JavaDocs
Make the `MockMessageHandler` with an API like:
```
MockIntegration.mockMessageHandler()
.handleNext(Consumer<Message<?>>)
.handleNext(Consumer<Message<?>>)
.handleNextAndReply(Function<Message<?>, Object>)
.handleNext(Consumer<Message<?>>)
.handleNextAndReply(Function<Message<?>, Object>)
.handleNextAndReply(Function<Message<?>, Object>);
```
Doc Polishing
This commit is contained in:
committed by
Gary Russell
parent
ea6cf0f4ef
commit
079ccb84e2
@@ -287,6 +287,40 @@ assertNotNull(receive);
|
||||
assertEquals("FOO", receive.getPayload());
|
||||
----
|
||||
|
||||
Unlike the Mockito `MessageSource` mock object, the `MockMessageHandler` is just a regular `AbstractMessageProducingHandler` extension with a chain API to stub handling for incoming messages.
|
||||
The `MockMessageHandler` provides `handleNext(Consumer<Message<?>>)` to specify a one-way stub for the next request message; used to mock message handlers that don't produce replies.
|
||||
The `handleNextAndReply(Function<Message<?>, ?>)` is provided for performing the same stub logic for the next request message and producing a reply for it.
|
||||
They can be chained to simulate any arbitrary request-reply scenarios for all expected request messages variants.
|
||||
These consumers and functions are applied to the incoming messages, one at a time from the stack, until the last, which is then used for all remaining messages.
|
||||
The behavior is similar to the Mockito `Answer` or `doReturn()` API.
|
||||
|
||||
In addition, a Mockito `ArgumentCaptor<Message<?>>` can be supplied to the `MockMessageHandler` in a constructor argument.
|
||||
Each request message for the `MockMessageHandler` is captured by that `ArgumentCaptor`.
|
||||
During the test, its `getValue()/getAllValues()` can be used to verify and assert those request messages.
|
||||
|
||||
The `MockIntegrationContext` provides an `instead()` API for replacing the actual configured `MessageHandler` with a `MockMessageHandler`, in the particular endpoint in the application context under test.
|
||||
|
||||
A typical usage might be:
|
||||
|
||||
[source,java]
|
||||
----
|
||||
ArgumentCaptor<Message<?>> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
|
||||
|
||||
MessageHandler mockMessageHandler =
|
||||
mockMessageHandler(messageArgumentCaptor)
|
||||
.handleNextAndReply(m -> m.getPayload().toString().toUpperCase());
|
||||
|
||||
this.mockIntegrationContext.instead("myService.serviceActivator", mockMessageHandler);
|
||||
GenericMessage<String> message = new GenericMessage<>("foo");
|
||||
this.myChannel.send(message);
|
||||
Message<?> received = this.results.receive(10000);
|
||||
assertNotNull(received);
|
||||
assertEquals("FOO", received.getPayload());
|
||||
assertSame(message, messageArgumentCaptor.getValue());
|
||||
----
|
||||
|
||||
See `MockIntegration` and `MockMessageHandler` JavaDocs for more information.
|
||||
|
||||
[[testing-other-resources]]
|
||||
=== Other Resources
|
||||
|
||||
|
||||
Reference in New Issue
Block a user