SLING-10944 sling-mock: Tear down MockSlingBindings on context tear down
diff --git a/core/src/main/java/org/apache/sling/testing/mock/sling/context/MockSlingBindings.java b/core/src/main/java/org/apache/sling/testing/mock/sling/context/MockSlingBindings.java
index 3aea292..e177da5 100644
--- a/core/src/main/java/org/apache/sling/testing/mock/sling/context/MockSlingBindings.java
+++ b/core/src/main/java/org/apache/sling/testing/mock/sling/context/MockSlingBindings.java
@@ -48,7 +48,7 @@
      */
     static final String SERVICE_PROPERTY_MOCK_SLING_BINDINGS_IGNORE = "MockSlingBindings-ignore";
 
-    private final SlingContextImpl context;
+    private volatile SlingContextImpl context;
 
     public MockSlingBindings(SlingContextImpl context) {
         this.context = context;
@@ -57,6 +57,9 @@
 
     @Override
     public Object get(Object key) {
+        if (this.context == null) {
+            return null;
+        }
         if (key instanceof String) {
             Object result = context.resolveSlingBindingProperty((String)key, context.request());
             if (result != null) {
@@ -81,6 +84,9 @@
 
     @Override
     public void handleEvent(Event event) {
+        if (this.context == null) {
+            return;
+        }
         // is triggered by OSGi events fired by {@link org.apache.sling.scripting.core.impl.BindingsValuesProvidersByContextImpl}
         // whenever a new bindings value provider is added or removed
         populateFromBindingsValuesProvider();
@@ -126,4 +132,8 @@
         return null;
     }
 
+    public void tearDown() {
+        this.context = null;
+    }
+
 }
diff --git a/core/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java b/core/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java
index 10b67df..a8b0b48 100644
--- a/core/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java
+++ b/core/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java
@@ -119,6 +119,7 @@
     /**
      * Setup actions before test method execution
      */
+    @Override
     protected void setUp() {
         super.setUp();
         MockSling.setAdapterManagerBundleContext(bundleContext());
@@ -212,8 +213,16 @@
     /**
      * Teardown actions after test method execution
      */
+    @Override
     protected void tearDown() {
 
+        if (this.request != null) {
+            MockSlingBindings slingBindings = (MockSlingBindings)this.request.getAttribute(SlingBindings.class.getName());
+            if (slingBindings != null) {
+                slingBindings.tearDown();
+            }
+        }
+
         if (this.resourceResolver != null) {
 
             // revert potential unsaved changes in resource resolver/JCR session