我们有一个使用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
,但同样的错误仍然存在。
我错过了什么细节(我希望它的细节:^))?
答案 0 :(得分:1)
我通过添加DataSourceTransactionManagerAutoConfiguration.class来解决此问题
@RunWith(SpringJUnit4ClassRunnerExtended.class)
@ContextConfiguration(classes = {SpringTestConfig.class, DataSourceTransactionManagerAutoConfiguration.class})
@ActiveProfiles(PROFILE_TU)
@Transactional
@TransactionConfiguration(defaultRollback = true)