1.Модульное тестирование
Если вы намереваетесь провести модульное тестирование открытого метода fallbackPersons
с помощью насмешки CacheManager
, я настоятельно рекомендую изменить стиль, которым вы вводите компонент cacheManager, с помощью инжектора конструктора:
import javax.cache.Cache;
import javax.cache.CacheManager;
@Service
public class PersonsService {
private final CacheManager cacheManager;
@Autowired
public PersonsService(@Qualifier(value = "cacheManager") CacheManager cacheManager) {
this.cacheManager = cacheManager;
}
public List<Person> fallbackPersons() {
List<Person> data = new ArrayList<>();
for (Cache.Entry<Object, Object> entry : cacheManager.getCache("person")) {
data = (List<Person>) entry.getValue();
}
return data;
}
}
Этот класс теперь очень прост для модульного тестирования, внедрив макет CacheManager
и запрограммировав его поведение, вам не нужно загружать контекст Spring (для применения @Autowired) или использовать библиотеку Powermock дляполучить доступ к частным свойствам.
Пример модульного теста:
public class PersonsServiceTest {
@Test
public void fallbackPersonsWithEmptyCache() {
CacheManager cacheManager = Mockito.mock(CacheManager.class);
Mockito.when(cacheManager.getCache(Matchers.anyString()))
.thenReturn(Collections.emptyList());
PersonsService service = new PersonsService(cacheManager);
List<Person> persons = service.fallbackPersons();
Assert.assertNotNull(persons);
Assert.assertTrue(persons.isEmpty());
}
}
2.Интеграционное тестирование
Если вы действительно хотите протестировать свой сервис с использованием реальной реализации диспетчера кэширования из Spring, то вам следует рассмотреть пример использования классов AbstractJUnit4SpringContextTests
или AbstractTestNGSpringContextTests
, предоставляемых Spring Framework.,Они позволят вам инициализировать истинный контекст Spring и внедрить реальные реализации CacheManager, такие как EhCahce и т. Д.