Me quedo relargo el titulo, pero la idea sería:
Tenemos una aplicación de spring boot y spring data que guarda información en Redis con un Dao y queremos probar este dao, ¿como lo hacemos?. Podemos usar testcontainers.
Testcontainers es un framework que levanta una imagen de docker para que diferentes tecnologías esten accesibles para nuestros tests.
Para utilizarlo debemos agregar esta dependencia en gradle o maven :
testImplementation "org.testcontainers:testcontainers:1.17.2"
Y en este ejemplo vamos a utilizar kotlin, pero funciona tambien con Java:
@RunWith(SpringJUnit4ClassRunner::class)
@SpringBootTest(classes = [Application::class])
class EjemploRepositoryTest {
@Autowired
lateinit var ejemploRepository: EjemploRepository
companion object {
init {
val redis : GenericContainer<Nothing> = GenericContainer<Nothing>(DockerImageName.parse("redis:5.0.3-alpine"))
.withExposedPorts(6379)
redis.start()
System.setProperty("redis.host", "${redis.host}")
System.setProperty("redis.port", "${redis.firstMappedPort}")
}
}
@Test
fun `save and find all ejemplos`() {
val count = ejemploRepository.findAll().count()
val ejemplo = crearUnEjemplo() //este metodo te crea un ejemplo :D
ejemploRepository.save(ejemplo)
val ejemplos = ejemplo.findAll()
Assert.assertNotNull(ejemplos)
Assert.assertEquals(count + 1, ejemplos.count())
}
}