2

我有一个基于 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);
 }
}

我的 maven-surefire-plugin 配置如下所示。

<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 clean test”时,对于每个存储库测试类,spring 应用程序上下文都会一遍又一遍地加载。有什么方法可以配置我的测试,以便我的所有存储库测试只加载一次 Spring 应用程序上下文?

4

2 回答 2

1

奇怪的是,spring 有一个用于缓存测试上下文的单例,只要您使用相同的上下文配置,spring 将重用上下文(请参阅文档

我能想象的唯一两个选择是,您使用的是旧版本的 spring,它没有此功能(我不确定何时引入此功能,但我认为大约是 2.5.x 版)

另一种选择是您的项目继承自 maven pom,该 pom 将surefire 配置为使用forkMode=always,这将为每个测试类生成一个新的 jvm。

我不知道其他哪种情况可能会导致这种情况......我希望以上内容有所帮助。

于 2013-08-05T14:34:14.133 回答
1

是的,设置选项forkMode=once(目前,在 2.15 版中,此选项已经默认为“once”。我不知道从什么时候开始,但我知道在早期版本中它是“always”)。

于 2013-08-05T14:33:42.440 回答