Этот вопрос немного устарел, но я просто написал это, и я думаю, что он немного более изящный, чем другие предлагаемые решения:
/// <summary>
/// Break a list of items into chunks of a specific size
/// </summary>
public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> source, int chunksize)
{
while (source.Any())
{
yield return source.Take(chunksize);
source = source.Skip(chunksize);
}
}
Добавить @DirtiesContext
аннотацию к вашему тестовому классу:
@ContextConfiguration(...)
@RunWith(...)
@DirtiesContext // <== add e.g. on class level
public class MyTest {
// ...
}
Эта аннотация указывает, что контекст приложения, связанный с тестом, грязный и должен быть закрыт. Последующие тесты будут снабжены новым контекстом. Работает на уровне класса и уровне метода.
Я не знаю, остается ли вопрос / вопрос релевантным, но вот простое / правильное решение (не нужно добавлять @DirtiesContext во все ваши тесты). Avoid @DirtiesContext позволяет иметь только один общий контекст для всех тестов интеграции (например, через maven или запускать все тесты в среде IDE). Это позволяет избежать множества проблем, вызванных несколькими контекстами, запущенными в одно и то же время.
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
p:configLocation="ehcache.xml"
p:cacheManagerName="myCacheManager"
p:shared="${ehcacheManager.shared:true}"
p:acceptExisting:"${ehcacheManager.acceptExisting:false}"/>
В ваших тестах (интеграционных тестах) задайте эти свойства
ehcacheManager.acceptExisting=true
ehcacheManager.shared=false
Это позволяет Spring создавать EhcacheManager (ehcache) для каждого теста, но если существует EhcacheManager с таким же именем, Spring просто повторно его использует. И Spring также не уничтожит / выключит его в контексте, аннотированном с @DirtiesContext.
Идея проста: вы предотвращаете уничтожение EhcacheManager при использовании @DirtiesContext.
Это применимо, если вы используете Spring 4 и EhCache: 2.5+. С Spring 3 вы должны расширить EhCacheManagerFactoryBean, чтобы добавить эти два свойства.
Не забудьте очистить кеш до каждого теста:)
Вы можете запустить тесты с отключенным кэшированием, даже если ваш код имеет методы с аннотациями @Cacheable.
Таким образом, вам не нужно замедлять выполнение теста, отмечая все ваши тесты с помощью @DirtiesContext .
Поместите связанные с кешем настройки Spring в свой собственный конфигурационный файл Spring, например. Файл applicationContext-cache.xml.
Включите этот файл applicationContext-cache.xml только при запуске приложения в реальном времени, но не в ваших тестах.
Если вы специально хотите протестировать кеширование, то вам понадобится аннотация @DirtiesContext.