Konrad Windszus created SLING-5967: -------------------------------------- Summary: MockSling calls SlingAdaptable.setAdaperManager in static initializer and prevents other test from overwriting the adapter manager Key: SLING-5967 URL: https://issues.apache.org/jira/browse/SLING-5967 Project: Sling Issue Type: Improvement Components: Testing Affects Versions: Testing Sling Mock 2.0.0 Reporter: Konrad Windszus
Currently {{MockSling}} calls {{SlingAdaptable.setAdapterManager(...)}} in a static initializer (https://github.com/apache/sling/blob/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java#L47). That leads to NPEs in case some other test classes have called {{SlingAdaptable.setAdapterManager()}} as well. The problem occurs in the following execution order of tests being executed within the same Java process: 1. a test leveraging SlingContext (which will trigger the static initializer in {{MockSling}} 2. a test calling {{SlingAdaptable.setAdapterManager()}} (and of course {{SlingAdaptable.unsetAdapterManager()}} after the test has been executed) 3. another test using SlingContext Here it breaks, because MockSling never tries to set its {{AdapterManager}} again. IMHO the code should be refactored, so that for {{SlingContext}} the AdapterManager is registered when it is setup and unregistered when it is no longer in use. In addition there should be a hint in the javadoc of SlingContext mentioning that {{SlingAdaptable.setAdapterManager(...)}} must not be called in tests leveraging {{SlingContext}}. -- This message was sent by Atlassian JIRA (v6.3.4#6332)