2013-06-06 4 views
1

Я работаю над установленным приложением, которое не имеет модульного тестирования. Я хочу начать писать тестовые примеры для этого приложения. Bean Mocking не существует, и мне потребуется много времени, чтобы настроить его. Поэтому, чтобы начать работу быстро и с тех пор, как у нас нет каких-либо тестов, я думаю о настройке тестирования интеграции, и, когда мне будет комфортно со всем охватом тестирования, я постепенно перейду к его преобразованию в истинное подразделение тестирование (путем насмешек). Поскольку приложение является большим и загружается, весенний контейнер занимает значительное количество времени, я хочу несколько советов по увеличению времени поворота. Я могу придумать несколько способов сделать это.Методы тестирования интеграции Spring?

  • Выпей легкий весенний контейнер работает все время, и запустить все случаи модульного тестирования против этого легкого контейнера. (Или иметь доступ к своей ApplicationContext)

  • Выполнить тестовые случаи против фактического сервера. (Run Junit удаленно из вашей IDE)

  • Используйте конфигурацию Spring Junit и как-то предотвратите перезагрузку контекста для каждого отдельного тестового примера.

Уверен, что этот прецедент возник бы раньше, любое понимание очень ценится.

ответ

0

Контекстное кэширование - это встроенная функция Spring, поэтому, если ваши тестовые примеры используют один и тот же файл конфигурации (или набор файлов), Spring не будет повторно перезагружать контекст. Просмотрите Context management and caching раздел справочных материалов:

По умолчанию после загрузки, сконфигурированный ApplicationContext повторно используются для каждого теста. Таким образом, стоимость установки возникает только один раз для набора тестов, а последующее выполнение теста выполняется намного быстрее. В этом контексте термин «набор тестов» означает, что все тесты выполняются в одной JVM.

+0

Но если мы хотим индивидуально запускать каждый из ваших тестовых примеров, контекст приложения теряется. Единственный способ, которым это работает, - это запустить целый набор тестовых примеров Junit. Вы теряете возможность модульного теста, и эта методология совершенно бесполезна, когда дело касается TDD. –

+0

@ doc_180 Кажется, что ваша проблема - это не только модульные тесты.Настало время, чтобы начать весну. Вы должны столкнуться с этой проблемой для запуска своего приложения локально и для разработки. Вы должны исследовать способы снижения скорости начала весны. Добавьте регистрацию и найдите то, что занимает так много времени. Это будет самое простое решение. – jasop

0

При проведении теста весной вы можете указать тест на конфигурацию контекста приложения, с которой вы хотите выполнить тест. Таким образом, вам не нужно использовать контекст вашего производственного приложения, вы можете создавать специальные конфиги для тестирования. У меня лично есть «контекст приложения для тестирования интеграции» и «контекст приложения для тестовых приложений». Но вы можете сломать это еще дальше.

Самый простой способ установить это - установить контекст приложения на суперклассах, и каждый тест проходит от одного из них.

например. Установка:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:BaseSpringIntegrationTestContext.xml") 
public abstract class BaseSpringIntegrationTest { 

и

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:BaseSpringUnitTestContext.xml") 
public abstract class BaseSpringUnitTest { 

затем для тестирования

public class BlahTest extends BaseSpringUnitTest { 

Следующим шагом будет работать, как вы можете ускорить запуск вашего весеннего контекста. Для некоторых ваших тестов некоторые важные компоненты могут вообще не загружаться.

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