"无法检索PlatformTransactionManager"将弹簧从4.1.7升级到4.3.2时出错

时间:2017-04-20 17:22:52

标签: spring junit

我们有一个使用Spring框架4.1.7版的项目。当我将spring版本更改为4.3.2时,几个JUnit测试失败。堆栈跟踪示例:

java.lang.IllegalStateException: Failed to retrieve PlatformTransactionManager for @Transactional test for test context [DefaultTestContext@497aec8c testClass = TesteMBeanDialogoAtivarSessao, testInstance = br.gov.tcu.arquitetura.test.util.contexto.TesteMBeanDialogoAtivarSessao@3b9632d1, testMethod = testarMBeanDialogoAtivarSessao@TesteMBeanDialogoAtivarSessao, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@64f16277 testClass = TesteMBeanDialogoAtivarSessao, locations = '{}', classes = '{class br.gov.tcu.arquitetura.tu.spring.config.SpringTestConfig}', contextInitializerClasses = '[]', activeProfiles = '{tu}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextCustomizers = set[[empty]], contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader', parent = [null]]].
    at org.springframework.test.context.transaction.TransactionalTestExecutionListener.beforeTestMethod(TransactionalTestExecutionListener.java:194)
    at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:269)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
    at br.gov.tcu.arquitetura.tu.util.junit.SpringRepeatExtended.evaluate(SpringRepeatExtended.java:40)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

所有这些测试都在Spring 4.1.7中成功运行。它们具有以下常见配置:

@RunWith(SpringJUnit4ClassRunnerExtended.class)
@ContextConfiguration(classes = {SpringTestConfig.class})
@ActiveProfiles(PROFILE_TU)
@Transactional
@TransactionConfiguration(defaultRollback = true)

我将@TransactionConfiguration(defaultRollback = true)替换为@Rollback,但同样的错误仍然存​​在。 我错过了什么细节(我希望它的细节:^))?

1 个答案:

答案 0 :(得分:1)

我通过添加DataSourceTransactionManagerAutoConfiguration.class来解决此问题

@RunWith(SpringJUnit4ClassRunnerExtended.class)
@ContextConfiguration(classes = {SpringTestConfig.class, DataSourceTransactionManagerAutoConfiguration.class})
@ActiveProfiles(PROFILE_TU)
@Transactional
@TransactionConfiguration(defaultRollback = true)