2013-08-05 84 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。 –

相关问题