Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] no answer found for BolaDao(#1).deletaBola(Bola(#4), continuation {}) among the configured answers:

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

2 respostas
solução!

Olá, Murilo!

Pelo que entendi, você está enfrentando um erro ao tentar fazer um teste de mock no seu projeto. O erro informa que não foi encontrada uma resposta configurada para a chamada do método deletaBola do BolaDao.

Uma possível solução para corrigir esse erro é adicionar uma resposta configurada para essa chamada do método deletaBola no seu teste de mock. No seu caso, você pode fazer isso da seguinte forma:

coEvery {
    bolaDao.deletaBola(any())
} returns Unit

Dessa forma, você está configurando o mock para que qualquer chamada do método deletaBola do BolaDao retorne Unit. Isso deve resolver o erro que você está enfrentando.

Além disso, é importante lembrar que você está utilizando o coEvery para tratar chamadas suspensas. Certifique-se de que o teste esteja sendo executado em um contexto de execução adequado, como o runBlocking.

OBS: Obrigado por compartilhar o link do seu projeto no GitHub. É sempre bom ter acesso ao código para entender melhor o contexto.

Espero ter ajudado. Bons estudos.

muito obrigado, deu certo.