2013-08-05 2 views
0

У меня есть веб-приложение Java EE на основе весны. Я тестирую свои «репозитории», которые являются объектами доступа к данным (DAO) с помощью junit. Я использую 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> 

Моя проблема заключается в том, что у меня есть несколько тестов хранилища и каждый раз, когда я бегу «МВН чистый тест», для каждого репозитория тестового класса, контекст весной приложение загружается снова и снова. Есть ли способ настроить мои тесты, чтобы контекст приложения 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. –

Смежные вопросы