Hi Camel users To process arbitrary logic in my Camel routes, I use simple bean calls. That is fine because I can test all these pieces of logic with standard unit tests.
However, often the bean calls produce results that are saved in the message header (if I need to save it for later) or Exchange properties (if it is only needed in the current route). So my bean methods often look like this: public void setDocumentGuid(@Headers Map<String, Object> headers); The header-map is passed to add new headers, the method is simply called with "bean(bean, method)" in the route. My problem arised in the route tests where I mock away the whole bean. I can mock the method call, but I cannot add entries to the header- or property-maps. So if the header or property entry is expected later in the route, it fails. Therefore I moved to bean methods like this: public String setDocumentGuid(); The header-map is no more needed, since the header value is returned and the method is called with "setHeader(headerKey, bean(bean, method)" in the route. Now I can return whatever I like from the mock. But the problem returns if #1: I have multiple values or objects I would like to save. I cannot return them in the method (without creating a "transport object" or returning a map), so I need to add them to the headers or properties in the method, but then they are not existing when I mock the method call. #2: I would like to test a subroutes (direct:) that is expecting Exchange properties from the parent route. I cannot easily set these properties for the tests of the subroute (I probably could by injecting a processor for the test that sets them, but the most simple test would become quite complex). I would like to only test the correct message flow with route tests and therefore mock away all beans (that are already tested with unit-tests), but since my beans set message headers or properties they are like a route-extension and needed to execute the route correctly. Am I missing a basic Camel concept? How do you draw the line between route with headers/properties and "external" components like beans? Thanks for any help Stephan