From 9f451210fb5577e0bb42737315028cc3595f977d Mon Sep 17 00:00:00 2001
From: Kai Moritz <kai@coolibri.de>
Date: Thu, 13 Oct 2011 00:23:27 +0200
Subject: [PATCH] =?utf8?q?Modul=20"test"=20hinzugef=C3=BCgt,=20das=20Hilfs?=
 =?utf8?q?klassen=20f=C3=BCr=20JUnit-Tests=20enth=C3=A4lt?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Das Modul enthält zunächst nur eine von stackoverflow.com entlehnte
klasse, die es ermöglicht, Beans mit dem Scope "request" in Spring-JUnit-
Testsfällen zu verwenden.
---
 pom.xml                                       |  1 +
 test/pom.xml                                  | 34 +++++++++++++++
 .../test/WebContextTestExecutionListener.java | 41 +++++++++++++++++++
 3 files changed, 76 insertions(+)
 create mode 100644 test/pom.xml
 create mode 100644 test/src/main/java/de/halbekunst/juplo/test/WebContextTestExecutionListener.java

diff --git a/pom.xml b/pom.xml
index 1bdbf17a..b043813c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,6 +24,7 @@
   </developers>
 
   <modules>
+    <module>test</module>
     <module>cachecontrol</module>
     <module>utils</module>
   </modules>
diff --git a/test/pom.xml b/test/pom.xml
new file mode 100644
index 00000000..112ce692
--- /dev/null
+++ b/test/pom.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>de.halbekunst</groupId>
+    <artifactId>juplo</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>${pom.parent.artifactId}-test</artifactId>
+  <name>Juplo - Test</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-beans</artifactId>
+      <version>${springframework.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-context</artifactId>
+      <version>${springframework.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-test</artifactId>
+      <version>${springframework.version}</version>
+    </dependency>
+  </dependencies>
+
+</project>
diff --git a/test/src/main/java/de/halbekunst/juplo/test/WebContextTestExecutionListener.java b/test/src/main/java/de/halbekunst/juplo/test/WebContextTestExecutionListener.java
new file mode 100644
index 00000000..68985c22
--- /dev/null
+++ b/test/src/main/java/de/halbekunst/juplo/test/WebContextTestExecutionListener.java
@@ -0,0 +1,41 @@
+package de.halbekunst.juplo.test;
+
+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);
+        }
+    }
+}
-- 
2.20.1