我有一个基于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应用程序上下文只加载一次我的所有存储库测试?
答案 0 :(得分:1)
是的,设置选项 forkMode =一次(目前,版本2.15,此选项已默认为&#34;一次&#34;。我不知道,因为这是但我知道在早期版本中它总是&#34;。
答案 1 :(得分:1)
奇怪的是,spring有一个用于缓存上下文进行测试的单例,只要你使用相同的上下文配置,spring就会重用上下文(see docs)
我能想象的唯一两个选项是,你使用的是没有这个功能的旧版弹簧(我不确定这个功能何时推出,但我认为有时会在2.5版本左右。 x)的
另一种选择是你的项目继承自maven pom,它配置surefire以使用forkMode=always,这将为每个测试类产生一个新的jvm。
我不知道哪种情况会导致这种情况......我希望上述情况有所帮助。