2013-04-08 30 views
1

問候。
我有一個Roo生成的網絡應用程序。我想測試我的控制器。所以我使用spring-test-3.2。
使用STS 3.2。
嵌入式德比測試。
測試套件當控制器測試兩個化融合試驗之間楔入失敗 - 打破它後面的集成測試。如果我@Ignore控制器測試,套件運行良好。這個集成測試有Roo生成和我自己的測試方法。
我搜索周圍有很多 - 但不能這樣做的原因行爲。我懷疑事務沒有正確回滾,但似乎一切正常(日誌很好)。 我只有一個空的控制器測試方法。我認爲,由於某種原因,我@ContextConfiguration是問題...春季3.2:現有@Transactional @WebAppConfiguration斷裂測試

集成測試之前:

@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阿圖爾

+0

_The測試套件fails_,失敗怎麼辦? – 2013-04-08 13:28:36

+0

斷裂測試方法假定 – atul 2013-04-09 04:05:52

+0

道歉 - 錯過了錯誤 - 斷試驗方法假設數據庫是乾淨的(作爲類被標記@Transactional) - 並創建** 4個**對象 - 下它調用活動記錄_countAll .. 。_ 方法。當單獨運行測試時,這可以正常工作。但是,如果套件(如上所述)運行,它會突然報告** 19個對象** - 這15個額外對象來自哪裏 - 是否以某種方式搞砸了@Transactional語義? – atul 2013-04-09 04:12:34

回答

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; 
}