@BeforeEach
    void beforeEach(@TempDir Path tempDir) {
        LOGGER.info("Running all migrations up to and including {}, using test data {}",
                getTargetVersion(), getTestDataVersion());
        this.testDataDir = tempDir;

        setupTestDataScript(tempDir);

        try {
            injector = Guice.createInjector(
                    new UniqueDbTestModule(),
                    getDatasourceModule(),
                    new AbstractModule() {
                        @Override
                        protected void configure() {
                            bind(ForceLegacyMigration.class)
                                    .toInstance(new ForceLegacyMigration() {
                                    });
                        }
                    }
            );
            injector.injectMembers(this);
        } catch (Exception e) {
            if (ExceptionUtils.getRootCause(e) instanceof SQLException) {
                throw new RuntimeException("There is an error in the migrations or in the test data script", e);
            } else {
                throw e;
            }
        }

        // It is not bound to DataSource so have to get it this way
        dataSource = injector.getInstance(getConnectionProviderType());
    }
@return A string containing the SQL script to run prior to the migration under test.
This can contain multiple statements, stored procedures, SET calls, etc. Same as a SQL
migration script. It does not use bind variables.
stroom-test-common/src/main/java/stroom/test/common/util/db/AbstractSingleFlywayMigrationTest.java