Projekt von de.halbekunst.juplo nach de.juplo verschoben und aufgeräumt
[percentcodec] / testingtools / src / main / java / de / juplo / testingtools / WebContextTestExecutionListener.java
diff --git a/testingtools/src/main/java/de/juplo/testingtools/WebContextTestExecutionListener.java b/testingtools/src/main/java/de/juplo/testingtools/WebContextTestExecutionListener.java
new file mode 100644 (file)
index 0000000..9309584
--- /dev/null
@@ -0,0 +1,41 @@
+package de.juplo.testingtools;
+
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.config.Scope;
+import org.springframework.context.support.GenericApplicationContext;
+import org.springframework.context.support.SimpleThreadScope;
+import org.springframework.test.context.TestContext;
+import org.springframework.test.context.support.AbstractTestExecutionListener;
+
+/**
+ * Diese Klasse ermöglicht es, Beans mit dem Scope REQUEST in JUnit-Testfällen
+ * zu verwenden.
+ * <p>
+ * Source: http://stackoverflow.com/questions/2411343/request-scoped-beans-in-spring-testing
+ * <p>
+ * Anwendung:
+ * <code>
+ * @RunWith(SpringJUnit4ClassRunner.class)
+ * @ContextConfiguration(locations = "classpath:spring/TestScopedBeans-context.xml")
+ * @TestExecutionListeners({
+ *      WebContextTestExecutionListener.class,
+ *      DependencyInjectionTestExecutionListener.class,
+ *      DirtiesContextTestExecutionListener.class })
+ * public class TestScopedBeans {
+ * ...
+ * </code>
+ */
+public class WebContextTestExecutionListener extends AbstractTestExecutionListener {
+    @Override
+    public void prepareTestInstance(TestContext testContext) throws Exception {
+
+        if (testContext.getApplicationContext() instanceof GenericApplicationContext) {
+            GenericApplicationContext context = (GenericApplicationContext) testContext.getApplicationContext();
+            ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
+            Scope requestScope = new SimpleThreadScope();
+            beanFactory.registerScope("request", requestScope);
+            Scope sessionScope = new SimpleThreadScope();
+            beanFactory.registerScope("session", sessionScope);
+        }
+    }
+}