2013-08-05 21 views
0

我有一個基於spring的Java EE web應用程序。我正在測試使用junit的數據訪問對象(DAO)的「存儲庫」。我使用maven來構建和測試我的項目。一個單元測試我的一個例子如下所示:如何防止在單元測試期間反覆加載彈簧應用程序上下文

@ContextConfiguration(locations = {"classpath:spring/business-objects.xml"}) 
@RunWith(SpringJUnit4ClassRunner.class) 
public class JpaUserRepositoryTests { 
@AutoWired 
UserRepository userRepository; 

@Test 
@Transactional 
public void testCreate() { 
    boolean result = userRepository.create(new User("name","pass")); 
    Assert.assertTrue(result); 
} 
} 

我的行家-萬無一失-插件配置如下所示。

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-surefire-plugin</artifactId> 
<version>2.13</version> 
<configuration> 
    <includes> 
    <include>**/*Tests.java</include> 
    </includes> 
</configuration> 
</plugin> 

我的問題是,我有多個庫測試,每次我跑「MVN清潔測試」的時候,每個倉庫測試類,Spring應用程序上下文加載一遍又一遍。有沒有什麼辦法來配置我的測試,以便Spring應用程序上下文只爲我的所有存儲庫測試加載一次?

回答

1

是,設置選項forkMode =一旦(目前,隨着版本2.15,此選項已默認爲「一次」,我不知道從什麼時候是這樣的話,但我知道這在以前是「永遠」版本)。

+0

謝謝,我認爲就是這樣。我只是從2.13更新到2.15。 –

1

這是奇怪的,春季有一個使用緩存進行測試的情況下,只要你使用相同的上下文配置的單,春天將重用上下文(see docs

的只有兩個選擇,我可以想像,是你使用的老版本的彈簧沒有這個功能(我不確定何時引入這個功能,但我認爲有時會在版本2.5.x左右)

另一種方法是你的項目繼承了一個maven pom,它配置surefire使用forkMode=always,這將爲每個測試類生成一個新的jvm。

我不知道哪種情況可能會導致這種情況...我希望上述有幫助。

+0

我使用的是spring-framework.version = 3.2.2.RELEASE和spring-data-jpa.version = 1.3.1.RELEASE。 –

相關問題