5

我正在尝试着手进行一些关于Spring单元测试以及特别是交易单元测试的讨论。Spring框架 - 单元测试设计

目前,我们在各种各样的注释,像这样的类各地441测试:

我们的测试类的
@RunWith(SpringJUnit4ClassRunner.class) 
@TransactionConfiguration 
@ContextConfiguration(locations={"/context/ServiceTest-context.xml"}, inheritLocations=false) 
public class ServiceTests extends AbstractTransactionalJUnit4SpringContextTests { 

    @Test 
    public void testSomething() {} 

    @Test 
    public void testSomethingElse() {} 
} 

每个人都有自己的测试环境。

我们面临的一个问题是,当我们运行单个测试类或单个包时,测试运行良好。

但是,当我们想通过使用maven或类似的哈德森集成来扩展运行所有我们的测试(当前> 400)。

mvn test 

我们到了一个地步,然后开始体验Java GC超限错误。

现在我觉得这是根据我们的测试计划设计,而不是我们需要任何内存限制或关闭警告。

任何人都可以分享他们的经验和他们解决类似问题的方式吗?

Eggsy

+0

您是否在各个测试之间共享测试环境并使用特定的forkmode配置?请参阅http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#forkMode –

+0

测试上下文在各个测试之间共享,但它们不在各个测试类/套件之间共享。我们通常有一个测试类,它使用一个上下文,然后在那个类中使用相同上下文的多个测试。那有意义吗?我们不使用特定的forkmode配置 - 这是做什么的? (从来没有使用过Maven选项) – eggsy84

+0

有用的链接为任何人寻找forkMode信息(http://maven.apache.org/plugins/maven-surefire-plugin/examples/class-loading.html) – eggsy84

回答

1

我敢肯定,容器将持有的所有上下文的生命周期,除非你明确地调用appCtx.close()

的持续时间是否有一些特殊的原因,每个测试都有自己的上下文?因为除非你有特殊的理由这样做......我会说,不要那样做。只要你有适当的设置和拆解方法,你应该可以分享。即使您将类似的测试组合在一起,并且只有这些共享上下文。请更多信息!