캐시 기능을 테스트 하는 방법을 간단하게 소개합니다.

캐시에 들어있는지 없는지 확인하면 되겠죠. 쉽게, CacheManager라는 것을 사용하면 됩니다. 어차피 스프링 캐시를 사용하려면 등록해야 하는 빈입니다. CacheManager는 인터페이스이고, 사용하려는 캐시에 따라 다른 CacheManager 빈을 등록해야 하죠. EhCache를 사용한다면, EhCacheCacheManager를 등록해야 합니다.

스프링 레퍼런스에도 EhCache를 사용하는 경우의 예제 코드를 제공하고 있는데요. 지금 스프링 레퍼런스 문서에 있는 코드는 소소한 문제가 있습니다. 버그 리포팅을 했으니 조만간 고쳐질 겁니다.

[xml]
<cache:annotation-driven />
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cacheManager-ref="ehcache"/>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="classpath:/ehcache.xml"/>
[/xml]

이런식으로 빈을 등록하게 되지요. 여기서 cachaManager라는 빈 id는 cache:annotation-driven에서 사용하는 기본값이기 때문에 되도록이면 cacheManager라고 id를 적어주는게 좋겠습니다. 물론 원하는 이름을 적은 뒤에 cache:annotation-driven에 cache-manager라는 속성에 명시해주어도 됩니다.

그리고 테스트는 이렇게 할 수 있습니다.

[java]
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/applicationContext.xml")
public class MemberServiceImplTest {

@Autowired MemberService service;
@Autowired CacheManager cacheManager;

@Test
public void getMemberCache(){
//GIVEN
Cache memberCache = cacheManager.getCache("member");

//WHEN
service.getAMember(1);
//THEN
assertThat(memberCache.get(1), is(notNullValue()));

//WHEN
service.getAMember(2);
//THEN
assertThat(memberCache.get(2), is(notNullValue()));

//WHEN
service.getAMember(3);
//THEN
assertThat(memberCache.get(3), is(notNullValue()));
}
[/java]

참 쉽죠?