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()

的持續時間是否有一些特殊的原因,每個測試都有自己的上下文?因爲除非你有特殊的理由這樣做......我會說,不要那樣做。只要你有適當的設置和拆解方法,你應該可以分享。即使您將類似的測試組合在一起,並且只有這些共享上下文。請更多信息!