@BeforeEach
    public final void setup(final TestInfo testInfo) {
        info("BeforeEach setup", testInfo);
        if (CURRENT_TEST_CLASS_THREAD_LOCAL.get() == null) {
            testTempDir = tempDirProvider.get();
            if (testTempDir == null) {
                throw new NullPointerException("Temp dir is null");
            }
            securityContext.asProcessingUser(() ->
                    commonTestControl.setup(testTempDir));

            CURRENT_TEST_CLASS_THREAD_LOCAL.set(this);
            LOGGER.debug("Set CURRENT_TEST_CLASS_THREAD_LOCAL to {} ({})",
                    this.getClass().getSimpleName(), System.identityHashCode(this));
        } else {
            final StroomIntegrationTest current = CURRENT_TEST_CLASS_THREAD_LOCAL.get();
            LOGGER.info("Previous test class on this thread: {}",
                    current.getClass().getSimpleName());
            if (!current.getClass().getName().equals(this.getClass().getName())) {
                throw new RuntimeException("Unexpected change of test without cleanup");
            }
        }

        // Record the test class and method
        TestClassLogger.logTestClasses(testInfo);
    }
Initialise required database entities.
<p>
Note this method is public to prevent subclasses from hiding.
stroom-app/src/test/java/stroom/test/StroomIntegrationTest.java