Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
00a643f9
Commit
00a643f9
authored
May 29, 2017
by
Michael J. Simons
Committed by
Stephane Nicoll
May 31, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add @JooqTest
This commit provides test slicing for jOOQ. See gh-9343
parent
a685d9ec
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
410 additions
and
0 deletions
+410
-0
spring-boot-features.adoc
spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc
+35
-0
pom.xml
spring-boot-test-autoconfigure/pom.xml
+5
-0
AutoConfigureJooq.java
...ework/boot/test/autoconfigure/jooq/AutoConfigureJooq.java
+41
-0
JooqTest.java
...pringframework/boot/test/autoconfigure/jooq/JooqTest.java
+97
-0
JooqTypeExcludeFilter.java
...k/boot/test/autoconfigure/jooq/JooqTypeExcludeFilter.java
+73
-0
package-info.java
...gframework/boot/test/autoconfigure/jooq/package-info.java
+20
-0
spring.factories
...utoconfigure/src/main/resources/META-INF/spring.factories
+9
-0
ExampleJooqApplication.java
.../boot/test/autoconfigure/jooq/ExampleJooqApplication.java
+41
-0
JooqTestIntegrationTests.java
...oot/test/autoconfigure/jooq/JooqTestIntegrationTests.java
+89
-0
No files found.
spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc
View file @
00a643f9
...
@@ -5832,6 +5832,41 @@ A list of the auto-configuration that is enabled by `@JdbcTest` can be
...
@@ -5832,6 +5832,41 @@ A list of the auto-configuration that is enabled by `@JdbcTest` can be
[[boot-features-testing-spring-boot-applications-testing-autoconfigured-jooq-test]]
==== Auto-configured jOOQ tests
`@JooqTest` is similar to `@JdbcTest` but for jOOQ related tests. By default it
will configure an in-memory embedded database and a `DSLContext`. Regular
`@Component` beans will not be loaded into the `ApplicationContext`:
[source,java,indent=0]
----
import org.jooq.DSLContext;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.autoconfigure.jooq.JooqTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@JooqTest
public class ExampleNonTransactionalTests {
@Autowired
DSLContext create;
}
----
JOOQ tests are also transactional and rollback at the end of each test by default.
If that's not what you want, you can disable transaction management for a test or for
the whole as shown with
<<boot-features-testing-spring-boot-applications-testing-autoconfigured-jdbc-test,`@JdbcTest`>>
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
<<appendix-test-auto-configuration#test-auto-configuration,found in the appendix>>.
[[boot-features-testing-spring-boot-applications-testing-autoconfigured-mongo-test]]
[[boot-features-testing-spring-boot-applications-testing-autoconfigured-mongo-test]]
==== Auto-configured Data MongoDB tests
==== Auto-configured Data MongoDB tests
`@DataMongoTest` can be used if you want to test MongoDB applications. By default, it will
`@DataMongoTest` can be used if you want to test MongoDB applications. By default, it will
...
...
spring-boot-test-autoconfigure/pom.xml
View file @
00a643f9
...
@@ -227,5 +227,10 @@
...
@@ -227,5 +227,10 @@
<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>
spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/jooq/AutoConfigureJooq.java
0 → 100644
View file @
00a643f9
/*
* 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
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
import
org.springframework.boot.autoconfigure.ImportAutoConfiguration
;
/**
* {@link ImportAutoConfiguration Auto-configuration imports} for typical jOOQ tests. Most
* tests should consider using {@link JooqTest @JooqTest} rather than using this
* annotation directly.
*
* @author Michael Simons
* @since 2.0.0
*/
@Target
(
ElementType
.
TYPE
)
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Documented
@ImportAutoConfiguration
public
@interface
AutoConfigureJooq
{
}
spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/jooq/JooqTest.java
0 → 100644
View file @
00a643f9
/*
* 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
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Inherited
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
import
org.springframework.boot.autoconfigure.ImportAutoConfiguration
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.test.autoconfigure.OverrideAutoConfiguration
;
import
org.springframework.boot.test.autoconfigure.filter.TypeExcludeFilters
;
import
org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase
;
import
org.springframework.boot.test.context.SpringBootTestContextBootstrapper
;
import
org.springframework.context.annotation.ComponentScan.Filter
;
import
org.springframework.core.annotation.AliasFor
;
import
org.springframework.test.context.BootstrapWith
;
import
org.springframework.transaction.annotation.Transactional
;
/**
* Annotation that can be used in combination with {@code @RunWith(SpringRunner.class)}
* for a typical jOOQ test. Can be used when a test focuses <strong>only</strong> on
* jOOQ-based components.
* <p>
* Using this annotation will disable full auto-configuration and instead apply only
* configuration relevant to jOOQ tests.
* <p>
* By default, tests annotated with {@code @JooqTest} will use an embedded in-memory
* database (replacing any explicit or usually auto-configured DataSource). Since
* jOOQ relies heavily on a Java-based schema that corresponds with the database schema,
* that is propably not what you want. The
* {@link AutoConfigureTestDatabase @AutoConfigureTestDatabase} annotation can be used
* to override these settings.
*
* @author Michael Simons
* @since 2.0.0
*/
@Target
(
ElementType
.
TYPE
)
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Documented
@Inherited
@BootstrapWith
(
SpringBootTestContextBootstrapper
.
class
)
@OverrideAutoConfiguration
(
enabled
=
false
)
@TypeExcludeFilters
(
JooqTypeExcludeFilter
.
class
)
@Transactional
@AutoConfigureJooq
@AutoConfigureTestDatabase
@ImportAutoConfiguration
public
@interface
JooqTest
{
/**
* Determines if default filtering should be used with
* {@link SpringBootApplication @SpringBootApplication}. By default no beans are
* included.
* @see #includeFilters()
* @see #excludeFilters()
* @return if default filters should be used
*/
boolean
useDefaultFilters
()
default
true
;
/**
* A set of include filters which can be used to add otherwise filtered beans to the
* application context.
* @return include filters to apply
*/
Filter
[]
includeFilters
()
default
{};
/**
* A set of exclude filters which can be used to filter beans that would otherwise be
* added to the application context.
* @return exclude filters to apply
*/
Filter
[]
excludeFilters
()
default
{};
/**
* Auto-configuration exclusions that should be applied for this test.
* @return auto-configuration exclusions to apply
*/
@AliasFor
(
annotation
=
ImportAutoConfiguration
.
class
,
attribute
=
"exclude"
)
Class
<?>[]
excludeAutoConfiguration
()
default
{};
}
spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/jooq/JooqTypeExcludeFilter.java
0 → 100644
View file @
00a643f9
/*
* 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
java.util.Collections
;
import
java.util.Set
;
import
org.springframework.boot.context.TypeExcludeFilter
;
import
org.springframework.boot.test.autoconfigure.filter.AnnotationCustomizableTypeExcludeFilter
;
import
org.springframework.context.annotation.ComponentScan.Filter
;
import
org.springframework.core.annotation.AnnotatedElementUtils
;
/**
* {@link TypeExcludeFilter} for {@link JooqTest @JooqTest}.
*
* @author Michael Simons
*/
class
JooqTypeExcludeFilter
extends
AnnotationCustomizableTypeExcludeFilter
{
private
final
JooqTest
annotation
;
JooqTypeExcludeFilter
(
Class
<?>
testClass
)
{
this
.
annotation
=
AnnotatedElementUtils
.
getMergedAnnotation
(
testClass
,
JooqTest
.
class
);
}
@Override
protected
boolean
hasAnnotation
()
{
return
this
.
annotation
!=
null
;
}
@Override
protected
Filter
[]
getFilters
(
final
FilterType
type
)
{
switch
(
type
)
{
case
INCLUDE:
return
this
.
annotation
.
includeFilters
();
case
EXCLUDE:
return
this
.
annotation
.
excludeFilters
();
default
:
throw
new
IllegalStateException
(
"Unsupported type "
+
type
);
}
}
@Override
protected
boolean
isUseDefaultFilters
()
{
return
this
.
annotation
.
useDefaultFilters
();
}
@Override
protected
Set
<
Class
<?>>
getDefaultIncludes
()
{
return
Collections
.
emptySet
();
}
@Override
protected
Set
<
Class
<?>>
getComponentIncludes
()
{
return
Collections
.
emptySet
();
}
}
spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/jooq/package-info.java
0 → 100644
View file @
00a643f9
/*
* 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.
*/
/**
* Auto-configuration for jOOQ tests.
*/
package
org
.
springframework
.
boot
.
test
.
autoconfigure
.
jooq
;
spring-boot-test-autoconfigure/src/main/resources/META-INF/spring.factories
View file @
00a643f9
...
@@ -45,6 +45,15 @@ org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
...
@@ -45,6 +45,15 @@ 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
# AutoConfigureJooq auto-configuration imports
org.springframework.boot.test.autoconfigure.jooq.AutoConfigureJooq=\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
# AutoConfigureTestDatabase auto-configuration imports
# AutoConfigureTestDatabase auto-configuration imports
org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase=\
org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase=\
org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration,\
org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration,\
...
...
spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/jooq/ExampleJooqApplication.java
0 → 100644
View file @
00a643f9
/*
* 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.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder
;
import
org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType
;
/**
* Example {@link SpringBootApplication} used with {@link JooqTest} tests.
*
* @author Michael Simons
*/
@SpringBootApplication
public
class
ExampleJooqApplication
{
@Bean
public
DataSource
dataSource
()
{
EmbeddedDatabaseBuilder
builder
=
new
EmbeddedDatabaseBuilder
()
.
generateUniqueName
(
true
).
setType
(
EmbeddedDatabaseType
.
HSQL
);
return
builder
.
build
();
}
}
spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/jooq/JooqTestIntegrationTests.java
0 → 100644
View file @
00a643f9
/*
* 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.Rule
;
import
org.junit.Test
;
import
org.junit.rules.ExpectedException
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.NoSuchBeanDefinitionException
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration
;
import
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration
;
import
org.springframework.boot.test.autoconfigure.orm.jpa.ExampleComponent
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
springframework
.
boot
.
test
.
autoconfigure
.
AutoConfigurationImportedCondition
.
importedAutoConfiguration
;
/**
*
* @author Michael Simons
*/
@RunWith
(
SpringRunner
.
class
)
@JooqTest
public
class
JooqTestIntegrationTests
{
@Rule
public
ExpectedException
thrown
=
ExpectedException
.
none
();
@Autowired
private
DSLContext
dsl
;
@Autowired
private
DataSource
dataSource
;
@Autowired
private
ApplicationContext
applicationContext
;
@Test
public
void
testDSLContext
()
{
assertThat
(
this
.
dsl
.
selectCount
().
from
(
"INFORMATION_SCHEMA.TABLES"
).
fetchOne
(
0
,
Integer
.
class
)).
isGreaterThan
(
0
);
}
@Test
public
void
replacesDefinedDataSourceWithEmbeddedDefault
()
throws
Exception
{
String
product
=
this
.
dataSource
.
getConnection
().
getMetaData
()
.
getDatabaseProductName
();
assertThat
(
product
).
isEqualTo
(
"H2"
);
assertThat
(
this
.
dsl
.
configuration
().
dialect
()).
isEqualTo
(
SQLDialect
.
H2
);
}
@Test
public
void
didNotInjectExampleComponent
()
throws
Exception
{
this
.
thrown
.
expect
(
NoSuchBeanDefinitionException
.
class
);
this
.
applicationContext
.
getBean
(
ExampleComponent
.
class
);
}
@Test
public
void
flywayAutoConfigurationWasImported
()
{
assertThat
(
this
.
applicationContext
)
.
has
(
importedAutoConfiguration
(
FlywayAutoConfiguration
.
class
));
}
@Test
public
void
liquibaseAutoConfigurationWasImported
()
{
assertThat
(
this
.
applicationContext
)
.
has
(
importedAutoConfiguration
(
LiquibaseAutoConfiguration
.
class
));
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment