Как принудительно выполнить переопределенный метод макетированного автопроводного поля в тестах JUnit? - PullRequest
1 голос
/ 12 мая 2019

У меня есть класс 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 ().

Как мне этого добиться?

1 Ответ

0 голосов
/ 12 мая 2019

Макет является независимой реализацией, у него нет перезаписанного метода, поэтому нет никакого способа "заставить" что-либо.

В зависимости от того, чего вы хотите достичь в своих тестах, возможны разные решения.

Простыми решениями могут быть использование реального кэша в тесте junit или фиктивного (не фиктивного) кэша, который всегда считывает и записывает данные в реальное хранилище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...