소스 검색

Introduce SpringTestContext

This adds support for testing different configurations per method.
Rob Winch 7 년 전
부모
커밋
9d46af3d7c

+ 58 - 0
config/src/test/java/org/springframework/security/config/test/SpringTestContext.java

@@ -0,0 +1,58 @@
+/*
+ * Copyright 2002-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.security.config.test;
+
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.mock.web.MockServletConfig;
+import org.springframework.mock.web.MockServletContext;
+import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
+
+import java.io.Closeable;
+import java.io.IOException;
+
+/**
+ * @author Rob Winch
+ * @since 5.0
+ */
+public class SpringTestContext implements Closeable {
+	private Object test;
+
+	private ConfigurableApplicationContext context;
+
+	public void setTest(Object test) {
+		this.test = test;
+	}
+
+	@Override
+	public void close() throws IOException {
+		this.context.close();
+	}
+
+	public SpringTestContext register(Class<?>... classes) {
+		AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
+		applicationContext.setServletContext(new MockServletContext());
+		applicationContext.setServletConfig(new MockServletConfig());
+		applicationContext.register(classes);
+		this.context = applicationContext;
+		return this;
+	}
+
+	public void autowire() {
+		this.context.refresh();
+		this.context.getBeanFactory().autowireBean(this.test);
+	}
+}

+ 42 - 0
config/src/test/java/org/springframework/security/config/test/SpringTestRule.java

@@ -0,0 +1,42 @@
+/*
+ * Copyright 2002-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.security.config.test;
+
+import org.junit.rules.MethodRule;
+import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.Statement;
+
+/**
+ * @author Rob Winch
+ * @since 5.0
+ */
+public class SpringTestRule extends SpringTestContext implements MethodRule {
+	@Override
+	public Statement apply(Statement base, FrameworkMethod method,
+		Object target) {
+		return new Statement() {
+			public void evaluate() throws Throwable {
+				setTest(target);
+				try {
+					base.evaluate();
+				} finally {
+					close();
+				}
+			}
+		};
+	}
+}