Я использую встроенный сервер Redis для своих тестов интеграции, и я заметил, что использование метода RedisServer.stop()
на самом деле не останавливает фиктивный сервер. Любая идея, как принудительно убить его в моих тестовых случаях?
Зависимость:
<!-- Redis test mock server -->
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>embedded-redis</artifactId>
<version>0.7.2</version>
<scope>test</scope>
</dependency>
Тест интеграции кэша:
@SpringBootTest
@ActiveProfiles("test")
@ExtendWith({SpringExtension.class, RestDocumentationExtension.class})
class CacheServiceImplTest {
private RedisServer redisServer;
@MockBean
private StoreRepository repo;
@Autowired
public ObjectMapper objectMapper;
@Autowired
private CacheService cacheService;
@PostConstruct
public void postConstruct() {
// if (redisServer.isActive()) {
//// redisServer.stop();
// Runtime.getRuntime().addShutdownHook(new Thread() {
// public void run() { redisServer.stop(); }
// });
// }
redisServer.start();
}
@PreDestroy
public void preDestroy() {
// redisServer.stop();
Runtime.getRuntime().addShutdownHook(new Thread(() -> redisServer.stop()));
redisServer.stop();
}
@Test
void saveStoreToRedis() {
List<Store> stores = new ArrayList<>();
initializeStores(stores);
when(repo.findAll()).thenReturn(stores);
List<StoreResponse> actualStoresResponse = storeDao.findAll();
Assert.assertNotNull(actualStoresResponse);
// cacheService.invalidateCache();
}
}
Я получаю ошибку
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xxx.CacheServiceImplTest.ORIGINAL': Invocation of init method failed; nested exception is java.lang.RuntimeException: Can't start redis server. Check logs for details.
Но когда я убиваю его вручную, все работает просто отлично.
lsof -i:6370
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 80714 XXX 4u IPv4 0x5c18b66bd501f58d 0t0 TCP localhost:6370 (LISTEN)
kill -9 80714