package org.kaleidofoundry.spring.junit; import org.junit.runner.notification.RunNotifier; import org.junit.runners.model.InitializationError; import org.kaleidofoundry.core.config.NamedConfigurationInitializer; import org.kaleidofoundry.core.env.EnvironmentInitializer; import org.kaleidofoundry.core.persistence.UnmanagedEntityManagerFactory; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * {@link SpringJUnit4ClassRunner} extension for kaleido * * @author jraduget * */ public class SpringExtendedJUnit4ClassRunner extends SpringJUnit4ClassRunner { public SpringExtendedJUnit4ClassRunner(Class<?> clazz) throws InitializationError { super(clazz); } /* * (non-Javadoc) * @see org.junit.runners.ParentRunner#run(org.junit.runner.notification.RunNotifier) */ @Override public void run(final RunNotifier notifier) { // create and init the configurations initializer NamedConfigurationInitializer configurationInitializer = new NamedConfigurationInitializer(getTestClass().getJavaClass()); configurationInitializer.init(); // load env variables and start kaleido components EnvironmentInitializer environmentInitializer = new EnvironmentInitializer(getTestClass().getJavaClass()); environmentInitializer.init(); environmentInitializer.start(); // run tests super.run(notifier); // cleanup at end // unload current configurations if (configurationInitializer != null) { try { configurationInitializer.shutdown(); } catch (Throwable th) { throw new IllegalStateException("error during the configurations unregister processing", th); } } // unload other resources like configurations / caches ... if (environmentInitializer != null) { environmentInitializer.stop(); } // release entity manager factory is used UnmanagedEntityManagerFactory.closeAll(); } }