package cucumber.runtime.groovy; import cucumber.runtime.io.ResourceLoader; import groovy.lang.Closure; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class ParallelTest { @Mock ResourceLoader resourceLoader; @Mock Closure closure; @Test public void can_have_a_new_backend_on_a_different_thread() { new GroovyBackend(resourceLoader); Thread interactWithBackendThread = new Thread(new Runnable(){ @Override public void run() { try { GroovyBackend.getInstance().registerWorld(closure); } catch (NullPointerException e){ // This is what we want as there should be no GroovyBackend on this thread } } }); runAndWait(interactWithBackendThread); GroovyBackend.getInstance().registerWorld(closure); } private void runAndWait(Thread interactWithBackendThread) { interactWithBackendThread.start(); try { interactWithBackendThread.join(); } catch (InterruptedException e) { throw new RuntimeException("Doh"); } } }