如何解决如何在Spring Boot中对ApplicationListener的onApplicationEvent方法进行单元测试?
我们正在使用@Slf4j
@requiredArgsConstructor
@Component
public class CacheLoadListener implements ApplicationListener<ApplicationReadyEvent> {
private final CacheManager cacheManager;
private final FooRepository fooRepository;
private final FoodomainToDtoMapper foodomainToDtoMapper;
@Override
public void onApplicationEvent(@NonNull ApplicationReadyEvent applicationReadyEvent) {
initfooCache();
}
private void initfooCache() {
log.info("Initializing foo cache");
Cache fooCache = cacheManager.getCache("fooCache");
fooRepository.findAll().stream()
.map(foodomainToDtoMapper::mapDomainToDto)
.forEach(FooDto -> {
if (fooCache != null) {
fooCache.put(FooDto.getIdLkFoo(),FooDto);
}
}
);
}
}
在应用程序启动时加载缓存。它是查找数据,我们希望在应用程序启动期间用此数据填充缓存。
@ExtendWith(MockitoExtension.class)
class CacheLoadListenerITest {
@Mock
private CacheManager cacheManager;
@Mock
private FooRepository fooRepository;
@Mock
private ApplicationReadyEvent applicationReadyEvent;
@InjectMocks
CacheLoadListener cacheLoadListener;
@BeforeEach
void setUp() {
cacheLoadListener = new CacheLoadListener(cacheManager,fooRepository,new FoodomainToDtoMapper());
}
//Trying to do something like:
@Test
public void testCacheLoadListener() {
//how to check if it is loading cache on startup and whether applicationReadyEvent is getting called?
when(cacheManager.getCache("fooCache")).thenReturn((Cache) new
ConcurrentMapCache("fooCache"));
when(fooRepository.findAll()).thenReturn(getfooEntityList());
cacheLoadListener.onApplicationEvent(applicationReadyEvent);
verify(fooRepository).findAll();
}
}
我正在尝试将单元测试编写为:
initfooCache()
测试运行正常,但根本看不到测试范围。调试期间,控件进入CacheLoadListener
内部。是否有任何方法可以测试此onApplicationEvent
或从中调用的这些私有方法{{1}}吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。