java - Mocking config with spring boot isn't picking up property files -
i trying write integrationflow test. goes this:
jms(in) -> (find previous versions in db) -> reduce(in,1...n) -> (to db) -> jms(out)
so, no suprise: want mock db calls; dao beans. but, want pickup other beans through component scan; selectively scan packages except dao.
- create test config , mock daos. no problem
- follow spring boot instructions testing component scanned beans. no problem
i want verify sequence of steps , resultant output outbound jms queue see it. can me fill in blanks?
this cant tough! use of mocks seems problematic because plenty of essential fields final. reading everywhere , not coming clear path. inherited code btw
my error:
org.springframework.integration.messagedispatchingexception: dispatcher has no subscribers
here code
@configuration @importresource("classpath:retry-context.xml") public class lifecycleconfig { @autowired private messageproducersupport inbound; @autowired private messagehandler outbound; @autowired @qualifier("reducer") private generictransformer<collection<extendedclaim>,extendedclaim> reducer; @autowired @qualifier("claimidtopojo") private generictransformer<string,claimdomain> topojo; @autowired @qualifier("findpreviousversion") private generictransformer<extendedclaim,collection<extendedclaim>> previousversions; @autowired @qualifier("savetodb") private generichandler<extendedclaim> todb; @bean public directchannel getchannel() { return new directchannel(); } @bean @autowired public standardintegrationflow processclaim() { return integrationflows.from(inbound). channel(getchannel()). transform(previousversions). transform(reducer). handle(extendedclaim.class,todb). transform(topojo). handle(outbound).get(); } }
test config
@configuration public class testconfig extends abstractclstest { @bean(name = "claimidtopojo") public claimidtopojo getclaimidtopojo() { return spy(new claimidtopojo()); } @bean public claimtoid getclaimtoidpojo() { return spy(new claimtoid()); } @bean(name = "findpreviousversion") public findpreviousversion getfindpreviousversion() { return spy(new findpreviousversion()); } @bean(name = "reducer") public reducer getreducer() { return spy(new reducer()); } @bean(name = "savetodb") public savetodb getsavetodb() { return spy(new savetodb()); } @bean public messageproducersupport getinbound() { messageproducersupport mock = mock(messageproducersupport.class); // when(mock.isrunning()).thenreturn(true); return mock; } @bean public paymentdao getpaymentdao() { return mock(paymentdao.class); } @bean public claimdao getclaimdao() { return mock(claimdao.class); } @bean public messagehandler getoutbound() { return new capturehandler<extendedclaim>(); } }
actual test won't load
@runwith(springjunit4classrunner.class) @contextconfiguration(classes = {testconfig.class, lifecycleconfig.class}) public class claimlifecycleapplicationtest extends abstractclstest { @autowired private messagehandler outbound; @autowired @qualifier("reducer") private generictransformer<collection<extendedclaim>,extendedclaim> reducer; @autowired @qualifier("claimidtopojo") private generictransformer<string,claimdomain> topojo; @autowired @qualifier("findpreviousversion") private generictransformer<extendedclaim,collection<extendedclaim>> previousversions; @autowired @qualifier("savetodb") private generichandler<extendedclaim> todb; @autowired private directchannel defaultchannel; @test public void testflow() throws exception { extendedclaim claim = getclaim(); message<extendedclaim> message = messagebuilder.withpayload(claim).build(); list<extendedclaim> previousclaims = arrays.aslist(claim); defaultchannel.send(message); verify(previousversions).transform(claim); verify(reducer).transform(previousclaims); verify(todb).handle(claim, anymap()); verify(topojo).transform(claim.getsubmitterclaimid()); verify(outbound); } }
there lot of domain-specific object, can't test reproduce or find other issue code.
but see don't use @enableintegration
on @configuration
s classes.
Comments
Post a Comment