Estamos no processo de começar a escrever nossos testes automatizados, mas temos bastante informação no projeto Jornada Milhas. Por onde podemos começar a fazer esses testes?
Começando com xUnit
Neste momento, sugerimos começar olhando para o arquivo OfertaViagem.cs, que é a classe de modelo principal da estrutura do Jornada Milhas. Nesse arquivo, temos alguns métodos:
- O construtor
OfertaViagem(); - O
ToString(); - E o método de validação
Validar().
Testando a estrutura do construtor
Para começarmos a fazer nossos testes e entender melhor como vai funcionar, podemos pegar a estrutura do construtor. Portanto, começaremos testando a estrutura de construção do objeto OfertaViagem.
OfertaViagem.cs:
public OfertaViagem(Rota rota, Periodo periodo, double preco)
{
Rota = rota;
Periodo = periodo;
Preco = preco;
Validar();
}
// código omitido
Renomeando a classe de teste
Agora que escolhemos qual parte começaremos a testar, vamos voltar ao projeto de testes. A primeira coisa que vamos fazer é renomear a classe de teste, porque o nome UnitTest1.cs que ele traz por padrão não referencia muita coisa, ou seja, quando olhamos para ele, não faz muito sentido.
Precisamos contextualizar melhor, então vamos renomear a classe de teste clicando com o botão direito sobre ela e selecionando a opção "Renomear". Chamaremos ela de OfertaViagemTest.cs.
Refatorando a classe de teste
Feito isso, saberemos que essa classe de teste se referencia a OfertaViagem. Na classe OfertaViagemTest, podemos renomear também o método de teste. Queremos testar se é gerada uma oferta válida pelo construtor, então vamos chamar o método de TestandoOfertaValida().
OfertaViagemTest.cs:
namespace JornadaMilhas.Test;
public class OfertaViagemTest
{
[Fact]
public void TestandoOfertaValida()
{
}
}
Construindo um novo objeto
Para começarmos a escrever o teste e testar efetivamente o construtor, precisamos construir um novo objeto. Sendo assim, podemos começar a trazer as informações necessárias para isso.
Primeiramente, precisaremos de uma rota, então vamos digitar Rota rota na linha 8 e atribuir new Rota. Ao começar a escrever Rota, percebemos que o Visual Studio não consegue identificar o que é esse tipo. Isso acontece porque precisamos trazer a referência de projeto quando trabalhamos com dois projetos diferentes dentro da mesma solução.
Dito isso, precisamos clicar com o botão direito sobre o projeto de teste JornadaMilhas.Test, e ir até "Adicionar > Referência de Projeto…". Na janela aberta, vamos sinalizar que queremos que ele tenha o projeto base como referência, então marcaremos JornadaMilhas e clicaremos em "OK".
A partir de agora, se posicionarmos o cursor sobre Rota, que está com marcação de erro, e clicarmos em "Mostrar possíveis correções", ele sugere utilizar o modelo JornadaMilhasV1.Modelos.
using JornadaMilhasV1.Modelos;
namespace JornadaMilhas.Test;
public class OfertaViagemTest
{
[Fact]
public void TestandoOfertaValida()
{
Rota rota = new Rota();
}
}
Dando continuidade à construção da Rota, vamos passar os valores entre parênteses. Precisamos passar a origem e o destino, então digitaremos "OrigemTeste" e "DestinoTeste".
O próximo item que precisamos passar é o período, então na linha 11, definiremos Periodo como periodo, e atribuiremos new Periodo(), recebendo a data de início e a data final. Nesse caso, traremos new DateTime(2024, 2, 1) como data inicial e new DateTime(2024, 2, 5) como data final.
Na sequência, o item que precisamos para construir uma oferta de viagem é o preço. Nesse caso, teremos um double preco que será de 100 reais (100.0).
Nesse teste, queremos verificar se ele está válido. Portanto, podemos também criar uma variável, que chamaremos de validacao, e ela deverá ser verdadeira, ou seja, true.
using JornadaMilhasV1.Modelos;
namespace JornadaMilhas.Test;
public class OfertaViagemTest
{
[Fact]
public void TestandoOfertaValida()
{
Rota rota = new Rota("OrigemTeste", "DestinoTeste");
Periodo periodo = new Periodo(new DateTime(2024, 2, 1), new DateTime(2024, 2, 5));
double preco = 100.0;
var validacao = true;
}
}
Com isso, já temos os itens necessários para construir a oferta de viagem, então vamos fazer isso efetivamente: na linha 15, teremos uma OfertaViagem que se chamará oferta.
Após =, vamos passar os atributos que acabamos de criar. Dessa forma, vamos adicionar new OfertaViagem() recebendo entre parênteses rota, periodo e preco.
Validando o novo objeto
Agora precisamos validar esse objeto e verificar se ele está válido. Para fazer isso, vamos utilizar um item do próprio xUnit: o Assert.
O Assert traz vários métodos, inclusive, aparece uma lista suspensa com sugestões referenciadas pelo Visual Studio. São vários os métodos que conseguiremos utilizar para fazer essa validação.
O que vamos utilizar nesse momento é o Equal(). O método Equal() receberá dois parâmetros: o parâmetro esperado e o parâmetro que deve ser verificado. Qual é o parâmetro esperado?
O parâmetro esperado é validacao, a qual queremos que seja verdadeira. Já o parâmetro que será verificado é o próprio método de validação de OfertaViagem, então utilizaremos oferta.EhValido.
using JornadaMilhasV1.Modelos;
namespace JornadaMilhas.Test;
public class OfertaViagemTest
{
[Fact]
public void TestandoOfertaValida()
{
Rota rota = new Rota("OrigemTeste", "DestinoTeste");
Periodo periodo = new Periodo(new DateTime(2024, 2, 1), new DateTime(2024, 2, 5));
double preco = 100.0;
var validacao = true;
OfertaViagem oferta = new OfertaViagem(rota, periodo, preco);
Assert.Equal(validacao, oferta.EhValido);
}
}
Testando o código
Com isso, finalizamos a construção do nosso primeiro teste. Vamos executar para conferir se funciona corretamente? Para melhorar a visualização do teste, vamos mover o "Gerenciador de Testes" da lateral esquerda para a direita. Por fim, vamos ocultar o "Gerenciador de Soluções".
Feito isso, podemos executar o teste. Uma maneira de fazer isso é acessar a aba "Gerenciador de Testes" e clicar na seta verde "Executar". Após a execução, o teste passou corretamente como esperávamos.
Conclusão
Além de construir o nosso primeiro teste automatizado, aprendemos também a importância de usar a referência de projeto quando trabalhamos com projetos diferentes na mesma solução.
Conhecemos também o Assert da biblioteca xUnit, responsável por trazer métodos que ajudam a fazer as validações dos testes. Na sequência, há um material extra falando mais sobre os métodos disponíveis.
No próximo vídeo, continuaremos conhecendo mais sobre os testes e construindo novos testes para a nossa aplicação. Te esperamos lá!