Spring 3.2:@WebAppConfiguration打破了现有的@Transactional测试

时间:2013-04-08 12:59:52

标签: java spring transactions spring-roo

问候。
我有一个Roo生成的网络应用程序。我想测试我的控制器。所以我正在使用spring-test-3.2     使用STS 3.2  嵌入式Derby用于测试。
    当控制器测试在两个集成测试之间进行楔入时,测试套件会失败 - 打破后面的集成测试。如果我@Ignore控制器测试,套件运行正常。这个集成测试既有Roo生成,也有我自己的测试方法     我搜索了很多 - 但不能解释这种行为。我怀疑交易没有正确回滚,但看起来一切都很好(日志很好)。     我只有一个空的控制器测试方法。我认为由于某种原因我的@ContextConfiguration是问题......

之前的集成测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:/META-INF/spring /applicationContext*.xml")
@Transactional
public class CompanyServiceImplTest {

控制器测试:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(value = {
    "file:src/main/resources/META-INF/sprin/applicationContext.xml",
    "file:src/main/webapp/WEB-INF/spring/webmvc-config.xml" })
@Transactional

之后的集成测试(此中断)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:/META-INF/spring/applicationContext*.xml")
@Transactional
@RooIntegrationTest(entity = Status.class)
public class StatusIntegrationTest {  

非常感谢任何指示......

--- cheerio atul

1 个答案:

答案 0 :(得分:1)

这可能是由https://jira.springsource.org/browse/SPR-6121

引起的

对我有用的解决方法是通过将@WebAppConfiguration添加到所有单元测试,并确保它们都具有相同的@ContextConfiguration,使所有单元测试使用相同的应用程序上下文。

你看起来像是在使用Spring Roo。为了避免编辑所有现有的单元测试,您可以为测试制作webmvc-config.xml的副本,重命名/移动它以匹配applicationContext * .xml模式。

可以使用以下方面将@WebAppConfiguration注释添加到现有测试中:

package com.foo.bar;

import org.springframework.test.context.web.WebAppConfiguration;

privileged aspect WebAppConfigurationAspect {
   declare @type: com.foo.bar..*Test: @WebAppConfiguration;
}