Adding Spring Integration to our project (apart from many advantages) brings drawbacks as well. One of them is more difficult testing.
Let's try to test the flow from MessageRouter to Persister via JSONHandler (please refer to the previous post) .
First of all, it won't be a unit test but an integration test as we need to start-up the spring context and test the flow between components.
Let's prepare spring xml config:
We're importing the application config and overriding beans with mockito mocks.
The test would look like:
Spring injects all the required components. We're mocking the behaviour, sending message to the channel and then verifying. Mocks need to be reset as well if we want to have more test methods.
By looking at the source code we don't see which object is mocked. To solve this problem (and simplify the code as well) we can use springockito.
Then in our config file we only need to import the application config without overriding any beans.
The overriding part is done in the test by using annotations:
To use springockito we need to change the context loader to SpringockitoContextLoader.
The @ReplaceWithMock annotation is self-descriptive.
The context is dirtied after execution of each test method which is basically equivalent to resetting the mocks.
Whole project can be found at github.