2
respostas

[Dúvida] No meu exemplo os 2 metodos não passou

Boa tarde, não consegui fazer rodar estes exemplos o que posso esta fazendo errado.

[Fact]
        public void TestaRemoverInformacoaDeterminadaAgenceia()
        {
            //Arrange
            //ACT

            var atualizado = _repositorio.Excluir(3);

            //Assert
            Assert.True(atualizado);

        }

Bem como este não gera a exceção.

//Exceções
        [Fact]
        public void TestaExcecaoConsultaPorAgenciaPorId()
        {
            //ACT
            //ASSERT

            Assert.Throws<FormatException>(
                () => _repositorio.ObterPorId(33)
                );
        }

Pode me ajudar ?

2 respostas

Jeferson,

Pelo que eu entendi, o teste apresentará erro se você NÃO tiver o código "3" dentro do seu banco de dados para remoção.

Então você precisa colocar uma agência Id "3" para poder apagá-la... exemplo:

USE bytebankbd;

SELECT * 
FROM agencia;

INSERT INTO `bytebankbd`.`agencia`
(`Id`,
`Numero`,
`Nome`,
`Endereco`,
`Identificador`)
VALUES
(3, '125982', 'Agência Guarapari', 'Rua: 7 de Setembro - Centro', 'b4334055-4fb6-4006-801a-7441aa7fced2');

Coloquei um comentário para NÃO esquecer de olhar na Base de Dados se existe o código "3":

/// <summary>
/// É preciso existir a agência ID "3" no Banco de Dados!
/// </summary>
[Fact]
[Trait("ID", "3")]
public void TestaRemoverInformacoaDeterminadaAgenceia()
{
    //Arrange
    //ACT
    var atualizado = _repositorio.Excluir(3);

    //Assert
    Assert.True(atualizado);
}

Agora sobre o Throw... Meu código-fonte:

#region EXCEÇÕES

/// <summary>
/// Não pode existir o ID 33 no Banco de Dados.
/// </summary>
[Fact(DisplayName = "TestaExcecaoConsultaPorAgenciaPorId",
        Skip = "Teste com problemas.")]
[Trait("ID", "33")]
public void TestaExcecaoConsultaPorAgenciaPorId()
{
    //ARRANGE
    //ACT
    //ASSERT
    Assert.Throws<FormatException>(
        () => _repositorio.ObterPorId(33));
}

#endregion

... eu também fiquei na dúvida, pois NÃO consegui o retorno. MAS ESPERE UM POUCO...

... ESTRANHO... a função "ObterPorId"...

public Agencia ObterPorId(int id)
{
    try
    {
        var agencia = _contexto.Agencias.FirstOrDefault(p => p.Id == id);
        if(agencia == null)
        {
            return null;
        }
        return agencia;
    }
    catch
    {
        throw new Exception($"Erro ao obter agência com Id = {id}.") ;
    }
}

... NÃO CAI NO THROW, mas cai no "return null;"... ?!? Então retorna NULO ... É esta a função certa para testar?!?

Por favor, Jeferson, experimente fazer colocando um break-point no "var agencia = ... " e fazendo o 'Gerenciado de Testes' rodar depurando (CTRL+R, CTRL+T). Veja se você consegue fazer a função cair no throw...

Recebi esta mensagem do 'Gerenciador de Testes':


Alura.ByteBank.Infraestrutura.Testes.AgenciaRepositorioTestes.TestaExcecaoConsultaPorAgenciaPorId

 Fonte: AgenciaRepositorioTestes.cs linha 99

 Duração: 3 ms

Mensagem: 

Assert.Throws() Failure

Expected: typeof(System.FormatException)

Actual: (No exception was thrown)

Rastreamento de Pilha: 

AgenciaRepositorioTestes.TestaExcecaoConsultaPorAgenciaPorId() linha 102

RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)

MethodInvoker.Invoke(Object obj, IntPtr* args, BindingFlags invokeAttr)


(No exception was thrown) = (Nenhuma exceção foi lançada)

Acho que esse teste está meio 'furado'... sei lá...

[]'s,

Fabio I.

Jeferson,

Olha o que o instrutor fez na aula "02 - Organizando os testes" (https://cursos.alura.com.br/course/testes-net-integrando-aplicacao-banco-dados/task/99404)

public Agencia ObterPorId(int id)
{
    try
    {
        var agencia = _contexto.Agencias.FirstOrDefault(p => p.Id == id);
        if(agencia == null)
        {
            throw new Exception($"Erro ao obter agência com Id = {id}.");
            //return null;
        }
        return agencia;
    }
    catch
    {
        throw new Exception($"Erro ao obter agência com Id = {id}.") ;
    }
}

MESMO ASSIM NO MEU TESTE NÃO DEU CERTO...

==========================================================

TestaExcecaoConsultaPorAgenciaPorId

 Fonte: AgenciaRepositorioTestes.cs linha 148

 Duração: 660 ms

Mensagem: 

Assert.Throws() Failure

Expected: typeof(System.FormatException)

Actual: typeof(System.Exception): Erro ao obter agência com Id = 33.

---- System.Exception : Erro ao obter agência com Id = 33.

Rastreamento de Pilha: 

AgenciaRepositorio.ObterPorId(Int32 id) linha 86

AgenciaRepositorioTestes.b__12_0() linha 154

----- Inner Stack Trace -----

AgenciaRepositorio.ObterPorId(Int32 id) linha 86

AgenciaRepositorioTestes.b__12_0() linha 154

Saída Padrão: 

Construtor executado com sucesso.

==========================================================

[]'s,

Fabio I.