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/

Thanks
-Doug



On Sat, Apr 5, 2014 at 2:33 AM, Claus Ibsen <[email protected]> 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
> <[email protected]> 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: [email protected]
> 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>

Reply via email to