Bom dia a todos
Essa pergunta não é sobre o código do curso, e sim um projeto meu que estou utilizando o mockk para fazer testes de mock.
Eu tenho um método no repositório que passa por mais de 1 função do dao ele é assim:
suspend fun deletaBola(id: String){
encontrarBolaPeloId(id).collect{ bolaEncotrada ->
bolaEncotrada?.let {
bolaDao.deletaBola(it)
}
}
}
Dentro dele tem outra função do repositório que é assim:
suspend fun encontrarBolaPeloId(id:String): Flow<Bola?> {
return flow {
emit(bolaDao.encontrarBolaPeloId(id))
}
}
E no dao ambos os métodos são assim:
suspend fun encontrarBolaPeloId(id: String):Bola?{
return listaDeBolasStateFlow.value.firstOrNull{
it.bolaId == id
}
}
suspend fun deletaBola(bola: Bola){
listaDeBolasStateFlow.value = listaDeBolasStateFlow.value - bola
}
Eu queria fazer um teste de mock que indica que ao chamar a função de deletaBola() do repositório, ele chama 2 funções do BolaDao, o encontrarBolaPeloId() e o deletaBola(). Eu tentei fazer o teste desse jeito:
@Test
fun `Deve chamar encontrarBolaPeloId e DeletarBola do BolaDao, Quando chamar deletar Bola do repositorio`(): Unit =
runBlocking {
coEvery {
bolaDao.encontrarBolaPeloId("c6fec989-5440-49b5-8b03-8236556f46ab")
} returns mockkClass(Bola::class)
coEvery {
bolaDao.deletaBola(bolaDeTesteCompleta)
} returns Unit
repositorio.deletaBola("c6fec989-5440-49b5-8b03-8236556f46ab")
coVerifySequence {
bolaDao.encontrarBolaPeloId("c6fec989-5440-49b5-8b03-8236556f46ab")
bolaDao.deletaBola(bolaDeTesteCompleta)
}
}
Mas eu tive esse erro:
No answer found for BolaDao(#1).deletaBola(Bola(#4), continuation {}) among the configured answers: (BolaDao(#1).encontrarBolaPeloId(eq(c6fec989-5440-49b5-8b03-8236556f46ab), any()))
BolaDao(#1).deletaBola(eq(Bola(bolaId=c6fec989-5440-49b5-8b03-8236556f46ab, nome=Bola Nike, preco=49.99, marcaId=849324c0-2d2d-4097-87f4-68dae63b2f5b, descricao=Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer sodales
laoreet, imagem=https://s2.glbimg.com/7dzisN-U42ChaQeJA8HPH9F8L4sp0re7dXrg1kCDpXpIoz-HdGixxa_8qOZvMp3w/s.glbimg.com/es/ge/f/original/2012/08/12/jabu.jpg, dataCriacao=2022-08-14T10:40, dataAlteracao=2022-08-14T10:40, estaAtivo=true)), any())))
io.mockk.MockKException: no answer found for BolaDao(#1).deletaBola(Bola(#4), continuation {}) among the configured answers: (BolaDao(#1).encontrarBolaPeloId(eq(c6fec989-5440-49b5-8b03-8236556f46ab), any()))
BolaDao(#1).deletaBola(eq(Bola(bolaId=c6fec989-5440-49b5-8b03-8236556f46ab, nome=Bola Nike, preco=49.99, marcaId=849324c0-2d2d-4097-87f4-68dae63b2f5b, descricao=Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer sodales
laoreet, imagem=https://s2.glbimg.com/7dzisN-U42ChaQeJA8HPH9F8L4sp0re7dXrg1kCDpXpIoz-HdGixxa_8qOZvMp3w/s.glbimg.com/es/ge/f/original/2012/08/12/jabu.jpg, dataCriacao=2022-08-14T10:40, dataAlteracao=2022-08-14T10:40, estaAtivo=true)), any())))
A minha dúvida é: como eu faço para corrigir esse erro e conseguir testar o fluxo do código
Ps: se precisar, esse é meu projeto no github
Ps2: eu sei que neste momento eu não precisaria de mock para fazer testes no repositório, mas no futuro eu vou implementar banco de dados e comunicação em API no projeto e queria deixar esse arquivo de teste preparado para isso