У меня есть класс CacheInterceptor, который расширяет HandlerInterceptorAdapter. В этом классе есть кэш с автопроводкой:
// CacheInterceptor.java
public class CacheInterceptor extends HandlerInterceptorAdapter {
@Autowired
private Cache<String, String> myCache;
...
}
Это определение компонента происходит в классе CachingConfiguration. Внутри этого класса я переопределяю метод записи Cache из-за дополнительного поведения, которое требуется проекту.
// CachingConfiguration.java
public class CachingConfiguration {
@Bean(name = "myCache")
public Cache<String, String> getMyCache() {
...
CacheWriter<String, String> writer = new CacheWriter<String, String>() {
@Override
public void write(String key, String value) throws Exception {
object.persist();
...
}
}
}
Затем у меня есть класс CacheInterceptorTest, в котором я издеваюсь над myCache, потому что в некоторых ситуациях мне нужно принудительно вернуть значение.
// CacheInterceptorTest.java
@ContextConfiguration(classes = {
CachingConfiguration.class
})
public class CacheInterceptorTest {
@MockBean
private Cache<String, String> myCache;
}
Это работает для большинства моих тестов. Однако существует один конкретный тест, который требует, чтобы метод write()
внутри getMyCache вызывался при помещении значения в Cache. Но так как я издеваюсь над этим, он использует оригинальную реализацию Cache.write ().
Как мне этого добиться?