Polish "Add @JooqTest"

Closes gh-9343
pull/9341/merge
Stephane Nicoll 8 years ago
parent 00a643f9d8
commit d096dcad1d

@ -5834,9 +5834,13 @@ A list of the auto-configuration that is enabled by `@JdbcTest` can be
[[boot-features-testing-spring-boot-applications-testing-autoconfigured-jooq-test]] [[boot-features-testing-spring-boot-applications-testing-autoconfigured-jooq-test]]
==== Auto-configured jOOQ tests ==== Auto-configured jOOQ tests
`@JooqTest` is similar to `@JdbcTest` but for jOOQ related tests. By default it `@JooqTest` can be used in a similar fashion as `@JdbcTest` but for jOOQ related tests. As
will configure an in-memory embedded database and a `DSLContext`. Regular jOOQ relies heavily on a Java-based schema that corresponds with the database schema, the
`@Component` beans will not be loaded into the `ApplicationContext`: existing `DataSource` will be used. If you want to replace it by an in-memory database you
can use `@AutoconfigureTestDatabase` to override those settings.
`@JooqTest` will configure a `DSLContext`. Regular `@Component` beans will not be loaded
into the `ApplicationContext`:
[source,java,indent=0] [source,java,indent=0]
---- ----
@ -5848,19 +5852,17 @@ will configure an in-memory embedded database and a `DSLContext`. Regular
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@JooqTest @JooqTest
public class ExampleNonTransactionalTests { public class ExampleJooqTests {
@Autowired @Autowired
DSLContext create; private DSLContext dslContext;
} }
---- ----
JOOQ tests are also transactional and rollback at the end of each test by default. JOOQ tests are transactional and rollback at the end of each test by default. If that's
If that's not what you want, you can disable transaction management for a test or for not what you want, you can disable transaction management for a test or for the whole test
the whole as shown with class as <<boot-features-testing-spring-boot-applications-testing-autoconfigured-jdbc-test,shown
<<boot-features-testing-spring-boot-applications-testing-autoconfigured-jdbc-test,`@JdbcTest`>> in the example above>>.
If you prefer your test to run against a real database, you can use the
`@AutoConfigureTestDatabase` annotation the same way as for `JdbcTest` or `DataJpaTest`.
A list of the auto-configuration that is enabled by `@JooqTest` can be A list of the auto-configuration that is enabled by `@JooqTest` can be
<<appendix-test-auto-configuration#test-auto-configuration,found in the appendix>>. <<appendix-test-auto-configuration#test-auto-configuration,found in the appendix>>.

@ -187,6 +187,11 @@
<artifactId>hsqldb</artifactId> <artifactId>hsqldb</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq</artifactId>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>org.mongodb</groupId> <groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-async</artifactId> <artifactId>mongodb-driver-async</artifactId>
@ -227,10 +232,5 @@
<artifactId>de.flapdoodle.embed.mongo</artifactId> <artifactId>de.flapdoodle.embed.mongo</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq</artifactId>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>

@ -42,14 +42,13 @@ import org.springframework.transaction.annotation.Transactional;
* Using this annotation will disable full auto-configuration and instead apply only * Using this annotation will disable full auto-configuration and instead apply only
* configuration relevant to jOOQ tests. * configuration relevant to jOOQ tests.
* <p> * <p>
* By default, tests annotated with {@code @JooqTest} will use an embedded in-memory * By default, tests annotated with {@code @JooqTest} use the configured database. If
* database (replacing any explicit or usually auto-configured DataSource). Since * you want to replace any explicit or usually auto-configured DataSource by an embedded
* jOOQ relies heavily on a Java-based schema that corresponds with the database schema, * in-memory database, the {@link AutoConfigureTestDatabase @AutoConfigureTestDatabase}
* that is propably not what you want. The * annotation can be used to override these settings.
* {@link AutoConfigureTestDatabase @AutoConfigureTestDatabase} annotation can be used
* to override these settings.
* *
* @author Michael Simons * @author Michael Simons
* @author Stephane Nicoll
* @since 2.0.0 * @since 2.0.0
*/ */
@Target(ElementType.TYPE) @Target(ElementType.TYPE)
@ -61,9 +60,9 @@ import org.springframework.transaction.annotation.Transactional;
@TypeExcludeFilters(JooqTypeExcludeFilter.class) @TypeExcludeFilters(JooqTypeExcludeFilter.class)
@Transactional @Transactional
@AutoConfigureJooq @AutoConfigureJooq
@AutoConfigureTestDatabase
@ImportAutoConfiguration @ImportAutoConfiguration
public @interface JooqTest { public @interface JooqTest {
/** /**
* Determines if default filtering should be used with * Determines if default filtering should be used with
* {@link SpringBootApplication @SpringBootApplication}. By default no beans are * {@link SpringBootApplication @SpringBootApplication}. By default no beans are
@ -94,4 +93,5 @@ public @interface JooqTest {
*/ */
@AliasFor(annotation = ImportAutoConfiguration.class, attribute = "exclude") @AliasFor(annotation = ImportAutoConfiguration.class, attribute = "exclude")
Class<?>[] excludeAutoConfiguration() default {}; Class<?>[] excludeAutoConfiguration() default {};
} }

@ -45,6 +45,11 @@ org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\ org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
# AutoConfigureTestDatabase auto-configuration imports
org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase=\
org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
# AutoConfigureJooq auto-configuration imports # AutoConfigureJooq auto-configuration imports
org.springframework.boot.test.autoconfigure.jooq.AutoConfigureJooq=\ org.springframework.boot.test.autoconfigure.jooq.AutoConfigureJooq=\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\ org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
@ -54,11 +59,6 @@ org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\ org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
# AutoConfigureTestDatabase auto-configuration imports
org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase=\
org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
# AutoConfigureJson auto-configuration imports # AutoConfigureJson auto-configuration imports
org.springframework.boot.test.autoconfigure.json.AutoConfigureJson=\ org.springframework.boot.test.autoconfigure.json.AutoConfigureJson=\
org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\ org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\

@ -37,6 +37,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.boot.test.autoconfigure.AutoConfigurationImportedCondition.importedAutoConfiguration; import static org.springframework.boot.test.autoconfigure.AutoConfigurationImportedCondition.importedAutoConfiguration;
/** /**
* Integration tests for {@link JooqTest}.
* *
* @author Michael Simons * @author Michael Simons
*/ */
@ -58,15 +59,16 @@ public class JooqTestIntegrationTests {
@Test @Test
public void testDSLContext() { public void testDSLContext() {
assertThat(this.dsl.selectCount().from("INFORMATION_SCHEMA.TABLES").fetchOne(0, Integer.class)).isGreaterThan(0); assertThat(this.dsl.selectCount().from("INFORMATION_SCHEMA.TABLES")
.fetchOne(0, Integer.class)).isGreaterThan(0);
} }
@Test @Test
public void replacesDefinedDataSourceWithEmbeddedDefault() throws Exception { public void useDefinedDataSource() throws Exception {
String product = this.dataSource.getConnection().getMetaData() String product = this.dataSource.getConnection().getMetaData()
.getDatabaseProductName(); .getDatabaseProductName();
assertThat(product).isEqualTo("H2"); assertThat(product).startsWith("HSQL");
assertThat(this.dsl.configuration().dialect()).isEqualTo(SQLDialect.H2); assertThat(this.dsl.configuration().dialect()).isEqualTo(SQLDialect.HSQLDB);
} }
@Test @Test
@ -86,4 +88,5 @@ public class JooqTestIntegrationTests {
assertThat(this.applicationContext) assertThat(this.applicationContext)
.has(importedAutoConfiguration(LiquibaseAutoConfiguration.class)); .has(importedAutoConfiguration(LiquibaseAutoConfiguration.class));
} }
} }

@ -0,0 +1,57 @@
/*
* Copyright 2012-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.boot.test.autoconfigure.jooq;
import javax.sql.DataSource;
import org.jooq.DSLContext;
import org.jooq.SQLDialect;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.EmbeddedDatabaseConnection;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.test.context.junit4.SpringRunner;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Integration tests for {@link JooqTest}.
*
* @author Stephane Nicoll
*/
@RunWith(SpringRunner.class)
@JooqTest
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
public class JooqTestWithAutoConfigureTestDatabaseIntegrationTests {
@Autowired
private DSLContext dsl;
@Autowired
private DataSource dataSource;
@Test
public void replacesAutoConfiguredDataSource() throws Exception {
String product = this.dataSource.getConnection().getMetaData()
.getDatabaseProductName();
assertThat(product).startsWith("H2");
assertThat(this.dsl.configuration().dialect()).isEqualTo(SQLDialect.H2);
}
}
Loading…
Cancel
Save