If you get it into a protected instance method, you can also make an inner class in your test, something like TestablePutJMS extends PutJMS, and overrides that method to return a mock or whatever you want. That is a common pattern in a lot of the processor tests.
On Fri, Dec 18, 2015 at 3:44 PM, Matt Burgess <[email protected]> wrote: > You could move the one static call into an instance method of PutJMS, and > use Mockito.spy() to get a partial mock of the processor, then use when() > to override the instance method in the test. Not sure if that's how it's > done in other places but it's worked for me in the past. > > Regards, > Matt > > Sent from my iPhone > > > On Dec 18, 2015, at 3:20 PM, Joe Skora <[email protected]> wrote: > > > > For unit testing, one problem I've run into is overriding the returns > from > > static class methods. > > > > For instance, PutJMS contains this code: > > > > try { > >> wrappedProducer = JmsFactory.createMessageProducer(context, true); > >> logger.info("Connected to JMS server {}", > >> new Object[]{context.getProperty(URL).getValue()}); > >> } catch (final JMSException e) { > >> logger.error("Failed to connect to JMS Server due to {}", new > >> Object[]{e}); > >> session.transfer(flowFiles, REL_FAILURE); > >> context.yield(); > >> return; > >> } > > > > where JmsFactory.createmessageProducer call being defined as > > > > public static WrappedMessageProducer createMessageProducer(... > > > > which presents a problem since it can't be easily overridden for a unit > > test. Exercising the > > > > How you handle this problem? > > > > Regards, > > Joe >
