}
public void startProcessing(TestResultProcessor resultProcessor) {
// Build a result processor chain
ClassLoader applicationClassLoader = Thread.currentThread().getContextClassLoader();
TestResultProcessor resultProcessorChain = new AttachParentTestResultProcessor(new CaptureTestOutputTestResultProcessor(resultProcessor, outputRedirector));
TestClassExecutionEventGenerator eventGenerator = new TestClassExecutionEventGenerator(resultProcessorChain, idGenerator, timeProvider);
// Wrap the result processor chain up in a blocking actor, to make the whole thing thread-safe
resultProcessorActor = actorFactory.createBlockingActor(eventGenerator);
TestResultProcessor threadSafeResultProcessor = resultProcessorActor.getProxy(TestResultProcessor.class);
TestClassExecutionListener threadSafeTestClassListener = resultProcessorActor.getProxy(TestClassExecutionListener.class);
// Build the JUnit adaptor stuff
JUnitTestEventAdapter junitEventAdapter = new JUnitTestEventAdapter(threadSafeResultProcessor, timeProvider, idGenerator);
executer = new JUnitTestClassExecuter(applicationClassLoader, spec, junitEventAdapter, threadSafeTestClassListener);