Cacheable и jUnit, похоже, что сначала игнорируется - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь проверить @Cacheable, а сейчас у меня есть проблемы, Похоже, что jUnit и контекст Spring просто игнорируют аннотацию @Cacheable

@RunWith(SpringRunner.class)
@DirtiesContext
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = {ConfigConfigurationTest.class})
public class ConfigurationTest {

    @TestConfiguration
    @EnableCaching()
    public static class ConfigConfigurationTest {


        @Primary
        @Bean(name = "TestCacheBean")
        public CacheManager cacheManager() {
            CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager("TestCache");
            return caffeineCacheManager;
        }
    }

    @Autowired
    @Qualifier("TestCacheBean")
    CacheManager cacheManager;

    @Mock
    MyDao dao;


    MyServiceImpl myServiceImpl ;


    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        myServiceImpl = new MyServiceImpl(dao);
    }

    @Test
    public void testCacheShouldPreventServiceCallDaoTwice() {
        //given
        Mockito.when(dao.findOne(1900L)).thenReturn(entity());
        //when
        CachedDTO conf1 = myServiceImpl.obtain(1900L);
        CachedDTO conf2 = myServiceImpl.obtain(1900L);
        //then
        Mockito.verify(dao, Mockito.times(1)).findOne(1900L);
    }
    ...
}

Моя служба вызывает dao, но dao не кэшируется, а только служба [возвращаются 'DTO', кэшируются], да, возможно, это не очень хорошая практика, но на данный момент нет других способов реорганизовать всю архитектуру.

Пока я вижу, что тест всегда вызывает службу дважды. Также я тестирую множество различных сценариев, как построить такой тест, и всегда получаю один и тот же результат, кешируемый кажется игнорируемым в течение всего процесса.

Результат теста:

org.mockito.exceptions.verification.TooManyActualInvocations: dao.findOne (1900); Разыскивается 1 раз: -> at lalalalala.ConfigurationTest.testCacheShouldPreventServiceCallDaoTwice (ConfigurationTest.java:108) Но было 2 раза. Нежелательный вызов:

@ EDIT:

Итак, после комментариев я изменил тест для использования контекста пружины, но результат по-прежнему не изменился.

@ EDIT2:

На данный момент проблема решена, я поместил Mocked Dao и MyService в @Configuration и сделал MyService также компонентом. Теперь это работает. Я потерял возможность использовать mocked dao, но я проверил это по-другому.

...