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
3b01bc03
Commit
3b01bc03
authored
Sep 20, 2019
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Switch TransactionAutoConfigurationTests to ApplicationContextRunner
parent
070eedaa
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
44 additions
and
62 deletions
+44
-62
TransactionAutoConfigurationTests.java
...figure/transaction/TransactionAutoConfigurationTests.java
+44
-62
No files found.
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/transaction/TransactionAutoConfigurationTests.java
View file @
3b01bc03
...
@@ -16,24 +16,21 @@
...
@@ -16,24 +16,21 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
transaction
;
package
org
.
springframework
.
boot
.
autoconfigure
.
transaction
;
import
java.util.List
;
import
java.util.Map
;
import
javax.sql.DataSource
;
import
javax.sql.DataSource
;
import
org.junit.jupiter.api.AfterEach
;
import
org.junit.jupiter.api.AfterEach
;
import
org.junit.jupiter.api.Test
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.autoconfigure.AutoConfigurations
;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
;
import
org.springframework.boot.jdbc.DataSourceBuilder
;
import
org.springframework.boot.jdbc.DataSourceBuilder
;
import
org.springframework.boot.test.
util.TestPropertyValues
;
import
org.springframework.boot.test.
context.runner.ApplicationContextRunner
;
import
org.springframework.context.annotation.AnnotationConfigApplicationContext
;
import
org.springframework.context.annotation.AnnotationConfigApplicationContext
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Import
;
import
org.springframework.context.annotation.Import
;
import
org.springframework.jdbc.datasource.DataSourceTransactionManager
;
import
org.springframework.jdbc.datasource.DataSourceTransactionManager
;
import
org.springframework.test.util.ReflectionTestUtils
;
import
org.springframework.transaction.PlatformTransactionManager
;
import
org.springframework.transaction.PlatformTransactionManager
;
import
org.springframework.transaction.annotation.EnableTransactionManagement
;
import
org.springframework.transaction.annotation.EnableTransactionManagement
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
...
@@ -51,98 +48,83 @@ import static org.mockito.Mockito.mock;
...
@@ -51,98 +48,83 @@ import static org.mockito.Mockito.mock;
*/
*/
class
TransactionAutoConfigurationTests
{
class
TransactionAutoConfigurationTests
{
private
AnnotationConfigApplicationContext
context
;
private
final
ApplicationContextRunner
contextRunner
=
new
ApplicationContextRunner
()
.
withConfiguration
(
AutoConfigurations
.
of
(
TransactionAutoConfiguration
.
class
));
@AfterEach
void
tearDown
()
{
if
(
this
.
context
!=
null
)
{
this
.
context
.
close
();
}
}
@Test
@Test
void
noTransactionManager
()
{
void
noTransactionManager
()
{
load
(
EmptyConfiguration
.
class
);
this
.
contextRunner
.
run
((
context
)
->
assertThat
(
context
).
doesNotHaveBean
(
TransactionTemplate
.
class
));
assertThat
(
this
.
context
.
getBeansOfType
(
TransactionTemplate
.
class
)).
isEmpty
();
}
}
@Test
@Test
void
singleTransactionManager
()
{
void
singleTransactionManager
()
{
load
(
new
Class
<?>[]
{
DataSourceAutoConfiguration
.
class
,
DataSourceTransactionManagerAutoConfiguration
.
class
},
this
.
contextRunner
"spring.datasource.initialization-mode:never"
);
.
withConfiguration
(
AutoConfigurations
.
of
(
DataSourceAutoConfiguration
.
class
,
PlatformTransactionManager
transactionManager
=
this
.
context
.
getBean
(
PlatformTransactionManager
.
class
);
DataSourceTransactionManagerAutoConfiguration
.
class
))
TransactionTemplate
transactionTemplate
=
this
.
context
.
getBean
(
TransactionTemplate
.
class
);
.
withPropertyValues
(
"spring.datasource.initialization-mode:never"
).
run
((
context
)
->
{
assertThat
(
transactionTemplate
.
getTransactionManager
()).
isSameAs
(
transactionManager
);
PlatformTransactionManager
transactionManager
=
context
.
getBean
(
PlatformTransactionManager
.
class
);
TransactionTemplate
transactionTemplate
=
context
.
getBean
(
TransactionTemplate
.
class
);
assertThat
(
transactionTemplate
.
getTransactionManager
()).
isSameAs
(
transactionManager
);
});
}
}
@Test
@Test
void
severalTransactionManagers
()
{
void
severalTransactionManagers
()
{
load
(
SeveralTransactionManagersConfiguration
.
class
);
this
.
contextRunner
.
withUserConfiguration
(
SeveralTransactionManagersConfiguration
.
class
)
assertThat
(
this
.
context
.
getBeansOfType
(
TransactionTemplate
.
class
)).
isEmpty
(
);
.
run
((
context
)
->
assertThat
(
context
).
doesNotHaveBean
(
TransactionTemplate
.
class
)
);
}
}
@Test
@Test
void
customTransactionManager
()
{
void
customTransactionManager
()
{
load
(
CustomTransactionManagerConfiguration
.
class
);
this
.
contextRunner
.
withUserConfiguration
(
CustomTransactionManagerConfiguration
.
class
).
run
((
context
)
->
{
Map
<
String
,
TransactionTemplate
>
beans
=
this
.
context
.
getBeansOfType
(
TransactionTemplate
.
class
);
assertThat
(
context
).
hasSingleBean
(
TransactionTemplate
.
class
);
assertThat
(
beans
).
hasSize
(
1
);
assertThat
(
context
.
getBean
(
"transactionTemplateFoo"
)).
isInstanceOf
(
TransactionTemplate
.
class
);
assertThat
(
beans
.
containsKey
(
"transactionTemplateFoo"
)).
isTrue
(
);
}
);
}
}
@Test
@Test
void
platformTransactionManagerCustomizers
()
{
void
platformTransactionManagerCustomizers
()
{
load
(
SeveralTransactionManagersConfiguration
.
class
);
this
.
contextRunner
.
withUserConfiguration
(
SeveralTransactionManagersConfiguration
.
class
).
run
((
context
)
->
{
TransactionManagerCustomizers
customizers
=
this
.
context
.
getBean
(
TransactionManagerCustomizers
.
class
);
TransactionManagerCustomizers
customizers
=
context
.
getBean
(
TransactionManagerCustomizers
.
class
);
List
<?>
field
=
(
List
<?>)
ReflectionTestUtils
.
getField
(
customizers
,
"customizers"
);
assertThat
(
customizers
).
extracting
(
"customizers"
).
asList
().
hasSize
(
1
).
first
()
assertThat
(
field
).
hasSize
(
1
).
first
().
isInstanceOf
(
TransactionProperties
.
class
);
.
isInstanceOf
(
TransactionProperties
.
class
);
});
}
}
@Test
@Test
void
transactionNotManagedWithNoTransactionManager
()
{
void
transactionNotManagedWithNoTransactionManager
()
{
load
(
BaseConfiguration
.
class
);
this
.
contextRunner
.
withUserConfiguration
(
BaseConfiguration
.
class
).
run
(
assertThat
(
this
.
context
.
getBean
(
TransactionalService
.
class
).
isTransactionActive
()).
isFalse
(
);
(
context
)
->
assertThat
(
context
.
getBean
(
TransactionalService
.
class
).
isTransactionActive
()).
isFalse
()
);
}
}
@Test
@Test
void
transactionManagerUsesCglibByDefault
()
{
void
transactionManagerUsesCglibByDefault
()
{
load
(
TransactionManagersConfiguration
.
class
);
this
.
contextRunner
.
withUserConfiguration
(
TransactionManagersConfiguration
.
class
).
run
((
context
)
->
{
assertThat
(
this
.
context
.
getBean
(
AnotherServiceImpl
.
class
).
isTransactionActive
()).
isTrue
();
assertThat
(
context
.
getBean
(
AnotherServiceImpl
.
class
).
isTransactionActive
()).
isTrue
();
assertThat
(
this
.
context
.
getBeansOfType
(
TransactionalServiceImpl
.
class
)).
hasSize
(
1
);
assertThat
(
context
.
getBeansOfType
(
TransactionalServiceImpl
.
class
)).
hasSize
(
1
);
});
}
}
@Test
@Test
void
transactionManagerCanBeConfiguredToJdkProxy
()
{
void
transactionManagerCanBeConfiguredToJdkProxy
()
{
load
(
TransactionManagersConfiguration
.
class
,
"spring.aop.proxy-target-class=false"
);
this
.
contextRunner
.
withUserConfiguration
(
TransactionManagersConfiguration
.
class
)
assertThat
(
this
.
context
.
getBean
(
AnotherService
.
class
).
isTransactionActive
()).
isTrue
();
.
withPropertyValues
(
"spring.aop.proxy-target-class=false"
).
run
((
context
)
->
{
assertThat
(
this
.
context
.
getBeansOfType
(
AnotherServiceImpl
.
class
)).
hasSize
(
0
);
assertThat
(
context
.
getBean
(
AnotherService
.
class
).
isTransactionActive
()).
isTrue
();
assertThat
(
this
.
context
.
getBeansOfType
(
TransactionalServiceImpl
.
class
)).
hasSize
(
0
);
assertThat
(
context
).
doesNotHaveBean
(
AnotherServiceImpl
.
class
);
assertThat
(
context
).
doesNotHaveBean
(
TransactionalServiceImpl
.
class
);
});
}
}
@Test
@Test
void
customEnableTransactionManagementTakesPrecedence
()
{
void
customEnableTransactionManagementTakesPrecedence
()
{
load
(
new
Class
<?>[]
{
CustomTransactionManagementConfiguration
.
class
,
TransactionManagersConfiguration
.
class
},
this
.
contextRunner
"spring.aop.proxy-target-class=true"
);
.
withUserConfiguration
(
CustomTransactionManagementConfiguration
.
class
,
assertThat
(
this
.
context
.
getBean
(
AnotherService
.
class
).
isTransactionActive
()).
isTrue
();
TransactionManagersConfiguration
.
class
)
assertThat
(
this
.
context
.
getBeansOfType
(
AnotherServiceImpl
.
class
)).
hasSize
(
0
);
.
withPropertyValues
(
"spring.aop.proxy-target-class=true"
).
run
((
context
)
->
{
assertThat
(
this
.
context
.
getBeansOfType
(
TransactionalServiceImpl
.
class
)).
hasSize
(
0
);
assertThat
(
context
.
getBean
(
AnotherService
.
class
).
isTransactionActive
()).
isTrue
();
}
assertThat
(
context
).
doesNotHaveBean
(
AnotherServiceImpl
.
class
);
assertThat
(
context
).
doesNotHaveBean
(
TransactionalServiceImpl
.
class
);
private
void
load
(
Class
<?>
config
,
String
...
environment
)
{
});
load
(
new
Class
<?>[]
{
config
},
environment
);
}
private
void
load
(
Class
<?>[]
configs
,
String
...
environment
)
{
AnnotationConfigApplicationContext
applicationContext
=
new
AnnotationConfigApplicationContext
();
applicationContext
.
register
(
configs
);
applicationContext
.
register
(
TransactionAutoConfiguration
.
class
);
TestPropertyValues
.
of
(
environment
).
applyTo
(
applicationContext
);
applicationContext
.
refresh
();
this
.
context
=
applicationContext
;
}
@Configuration
(
proxyBeanMethods
=
false
)
static
class
EmptyConfiguration
{
}
}
@Configuration
(
proxyBeanMethods
=
false
)
@Configuration
(
proxyBeanMethods
=
false
)
...
...
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