On Fri, Apr 25, 2014 at 4:42 PM, Doug Turnbull <dturnb...@opensourceconnections.com> wrote: > Hey Claus, > > Sorry for my late reply. It turns out that I was not setting > "isUsingAdviceWith" in my Camel tests to prevent the routes from starting > before my mocking. Here's a blog post with this and other discoveries > writing unit tests: > > http://www.opensourceconnections.com/2014/04/24/correctly-using-camels-advicewith-in-unit-tests/ >
Hi Thanks for sharing this great blog post. I am adding a link to it from our link collection at http://camel.apache.org/articles > Thanks > -Doug > > > > On Sat, Apr 5, 2014 at 2:33 AM, Claus Ibsen <claus.ib...@gmail.com> wrote: > >> You should see an INFO logging with the endpoints being mocked during >> the advice process. >> Don't you see that? >> >> On Fri, Apr 4, 2014 at 9:09 PM, Doug Turnbull >> <dturnb...@opensourceconnections.com> wrote: >> > Hello, >> > >> > I'm attempting to use AdviceWith for testing a route The route looks >> like: >> > >> > from("file:inbox?doneFile=done") >> > .unmarshall(csv) >> > .split(body()) >> > .to("direct:csvRecords") >> > >> > I've written a test that attempts to confirm that files get unmarshalled >> to >> > csv correctly and are sent to my mocked direct:csvRecords endpoint. As >> > such, my test looks like what is recommended from the Camel mock page >> > https://camel.apache.org/mock.html. The main difference is I'm sending >> > through real files, but treating direct:csvRecords as a mock to confirm >> > correct behavior. >> > >> > public void mockAllEndpoints() throws Exception { >> > AdviceWithRouteBuilder mockDirect = new AdviceWithRouteBuilder() { >> > >> > @Override >> > public void configure() throws Exception { >> > // mock the for testing >> > mockEndpoints(); >> > } >> > }; >> > context.getRouteDefinitions().get(0) >> > .adviceWith(context, mockDirect); >> > } >> > >> > Then in my test I have: >> > >> > @Test >> > public void testReadCsvFileWhenDoneFile() throws Exception { >> > mockAllEndpoints(); >> > MockEndpoint mockDirectCsv = getMockEndpoint("mock:direct:csvRecords"); >> > File testCsv = new File("test.csv"); >> > assertTrue(testCsv.exists()); >> > mockDirectCsv.expectedMessageCount(3); >> > FileUtils.copyFile(testCsv, new File("inbox/test.csv")); >> > FileUtils.touch(new File("inbox/done")); >> > Thread.sleep(100); >> > // Confirm nothing's been processed >> > mockDirectCsv.assertIsSatisfied(); >> > } >> > >> > >> > The "assertIsSatisfied" fails because the expectation isn't met. I can >> > confirm that CSV deserialization and processing is happening because if I >> > add a .process() and to a println, I see all three csv records in that >> file >> > come out fine. I'd just like to be able to build tests around expected >> > behavior for my routes. >> > >> > As far as I can tell the mock endpoint isn't getting hit with messages. >> If >> > I put a breakpoint in the mock endpoint code where the message counter is >> > incremented, it is never hit. So the assertIsSatisfied fails due to not >> > enough messages being brought through. >> > >> > (I'm running Camel 2.12.3 on Windows 7. Java 7) >> > >> > Thanks >> > >> > -- >> > Doug Turnbull >> > Search & Big Data Architect >> > OpenSource Connections <http://o19s.com> >> >> >> >> -- >> Claus Ibsen >> ----------------- >> Red Hat, Inc. >> Email: cib...@redhat.com >> Twitter: davsclaus >> Blog: http://davsclaus.com >> Author of Camel in Action: http://www.manning.com/ibsen >> Make your Camel applications look hawt, try: http://hawt.io >> > > > > -- > Doug Turnbull > Search & Big Data Architect > OpenSource Connections <http://o19s.com> -- Claus Ibsen ----------------- Red Hat, Inc. Email: cib...@redhat.com Twitter: davsclaus Blog: http://davsclaus.com Author of Camel in Action: http://www.manning.com/ibsen hawtio: http://hawt.io/ fabric8: http://fabric8.io/