1

问候。
我有一个 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 {  

将不胜感激任何指针...

--- 快乐阿图尔

4

1 回答 1

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;
}
于 2013-05-10T12:52:54.733 回答