For testing existing routes you can use AdviceWith  and advice a route before its being tested. 
I propose using weaveById which is the most precise way to replace parts of a route. 
For example in the following route
from("direct:start")
    .to("mock:foo")
    .to("mock:bar").id("bar")
    .to("mock:result");
After setting the id of "mock:bar" to "bar" then you can use in your test
 context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
        @Override
        public void configure() throws Exception {
            // weave the node in the route which has id = bar
            // and replace it with the following route path
            weaveById("bar").replace().multicast().to("mock:a").to("mock:b");
        }
    });
In you example you can do something like:
from("a").b().to("direct:replace").id("replace").c().to("d");
from("direct:replace").signReq().send().validateAns();
And afterwards advice the route by using:
 weaveById("replace").remove();
Of course more ways exist to implement this functionality. For all the options and a  full example go to http://camel.apache.org/advicewith.html
Tip: Give extra attention to the part of the code in the example that starts the context!
// we must manually start when we are done with all the advice with
        context.start();