Alura > Cursos de Programação > Cursos de .NET > Conteúdos de .NET > Primeiras aulas do curso Testes em .NET: testando software

Testes em .NET: testando software

Testes - Apresentação

Olá. Primeiramente, boas-vindas ao curso de Testes em .NET. Meu nome é André e serei o instrutor de vocês durante esse percurso. É importante que vocês tenham conhecimento mínimo, básico, da linguagem C# e orientação a objeto, será muito útil, vocês tirarão maior proveito deste curso.

Este curso é uma ótima oportunidade para se aprofundar um pouco mais no universo .NET e na linguagem C#. O que vamos ver durante o curso? Vamos começar trabalhando com uma aplicação para estacionamento, uma aplicação já existente, onde vamos implementar novas funcionalidades e testar funcionalidades já existentes.

Vamos trabalhar com testes unitários, testando as menores unidades de código da nossa aplicação. Vamos usar como framework de testes o xUnit, que é uma ferramenta de mercado bastante utilizada. Trabalharemos também com boas práticas, com conceitos como TDD, para desenvolvermos a nossa aplicação e evoluir ela durante o curso com as melhores práticas de mercado e metodologias realmente eficientes. Vamos começar?

Testes - Configuração do ambiente

Olá. Vamos iniciar o nosso curso de Testes com .NET. Eu vou apresentar para vocês o projeto que vamos trabalhar durante o curso, e vamos evoluir essa solução, e as ferramentas que vamos usar neste percurso. A ferramenta que vamos utilizar como IDE será o Visual Studio 2019, o Visual Studio Community 2019.

Eu estou com o projeto que apresentarei agora. Se trata de uma solução para um estacionamento, o “Alura Estacionamento”. Esse é um projeto .NET, claro, feito do tipo console, é uma aplicação já funcional. Tem algumas funcionalidades prontas, eu vou passar para vocês e vou apresentar o projeto.

Vamos evoluir essa solução desenvolvendo novas funcionalidades com base nos testes criados durante esse percurso. Eu tenho a minha aplicação console, eu vou executar ela aqui. Eu vou iniciar a aplicação, colocar para executar. E, como eu falei, é uma aplicação console.

Ela tem algumas opcionalidades já funcionando, como registrar a entrada de um veículo, registrar a saída, exibir o faturamento do estacionamento, mostrar veículos estacionados e sair do programa. Uma aplicação bem funcional. Opção 1, entrada.

Qual o tipo do veículo? É carro, é moto? Será um carro. Terá um padrão para placa, "asd-9999". A cor do carro será "Verde". Proprietário, "André". Automóvel registrado com sucesso.

Ele volta para o menu. Eu vou registrar a saída também do veículo, opção 2. A placa "asd-9999". O sistema faz um cálculo internamente para validar, informar o valor que tem que ser pago por aquele período que o veículo ficou no estacionamento.

Volto para o menu. Então nós temos a entrada e a saída de um veículo no estacionamento. Eu posso exibir o faturamento total, até agora eu tenho 2 reais nesse faturamento.

Eu só tive um veículo, ele entrou e saiu, está funcionando. Eu posso mostrar os veículos estacionados também, opção 4.

Nenhum veículo estacionado aqui no momento. E a opção 5, sair da aplicação. Então é uma aplicação console, já tem algumas funcionalidades prontas, mas não foi implementado nenhum teste ainda, e vamos criar alguns testes, automatizar alguns testes, para poder evoluir essa solução, essa aplicação.

A solução, ela é composta hoje pelo "Program.cs", que faz essa interface com o usuário. Essa interface console é toda escrita aqui, na classe "Program.cs". Eu tenho a opção de montar o menu, mostrar os veículos estacionados, algumas funcionalidades.

A entrada de veículo, a saída do veículo, tudo documentado. Esse projeto, pessoal, fiquem tranquilos, que estará disponível para vocês fazerem o download e seguirem com ele durante o curso. Algumas funcionalidades básicas, essa é a entrada do veículo.

Moto, carro, enfim. Aqui eu tenho no projeto também as classes de modelo, "Alura.Estacioamento.Modelos" é o nosso projeto, onde eu tenho o "Veiculo.cs", que é a abstração e uma informação importante, que eu quero registrar no estacionamento, que é a entrada e a saída de veículos.

O meu veículo, a classe veículo, ela tem alguns campos já definidos, como placa, proprietário, que são encapsulados em algumas propriedades também, umas de maneira automática, outras não. Mas, por exemplo, a placa, eu estou encapsulando aqui, a placa inclusive com algumas restrições direto nessas propriedades.

Eu tenho uns métodos que eu já deixei criados aqui, que é o Acelerar, por exemplo, que ele vai incrementar a propriedade VelocidadeAtual do veículo em 10 segundos, nós contamos 10 no valor passado como parâmetro. E também o método Frear.

Nós já inicializamos a nossa aplicação com dois métodos nessa classe veículo, além dos construtores, alguns parametrizados e outros não. Eu também tenho uma enumeração "TipoVeiculo.cs".

É onde eu defino o automóvel como 0 e a motocicleta como 1. No futuro, se eu quiser incrementar com novos tipos de veículos, é só eu vir aqui, na enumeração, e adicionar 2, caminhões, enfim. Eu tenho também a classe "Patio.cs".

O "Patio.cs", ele será a abstração do meu estacionamento. Então o pátio é uma classe, eu defini como public para eu poder testar depois, mas ela encapsula aqui uma lista de veículos. É na classe "Patio.cs" que eu vou definir, vou conseguir a informação do total faturado pelo pátio.

Vou mostrar o faturamento, registrar a entrada do veículo, que corresponde a adicionar o veículo criado à minha lista de veículos, dentro do meu “Patio.cs”, e registrar a saída também. Aqui, o RegistrarSaidaVeiculo, é interessante porque é no RegistrarSaidaVeiculo que fazemos o cálculo do valor que precisa ser cobrado.

Essa é a nossa aplicação, vamos evoluir ela durante todo o curso com base nos testes.

Testes - Criando um projeto com testes

Olá, continuando, já conhecemos a solução que vamos evoluir durante o curso, que é o Alura Estacionamento. É uma solução, uma aplicação, que irá gerenciar um pátio de estacionamento, registrando a entrada do veículo, a saída do veículo, listando os veículos estacionados, verificando o faturamento do estacionamento.

Nós vamos evoluir essa solução de estacionamento da Alura com base nos testes. Existem algumas ferramentas disponíveis hoje para fazermos, criarmos os nossos códigos de teste, mas a escolhida para esse curso foi o xUnit. Vamos configurar agora o nosso projeto para receber esse código e esse projeto de teste.

Na minha solução, reparem bem que aqui temos um projeto, que é o nosso projeto console. Nessa solução eu vou adicionar um projeto de teste. Em cima da solução, no menu direito, botão direito, eu vou clicar em "Adicionar > Novo Projeto...". Vou pesquisar aqui, filtrar, pelo xUnit.

"Projeto de Teste do xUnit". Selecionei, "Próximo", vou dar um nome para o meu projeto de teste, vou chamar ele de "Alura.Estacionamento.Testes". "Próximo", vou usar como estrutura do projeto o ".NET 5.0", que é a versão atual, "Criar". Agora na minha solução eu tenho dois projetos, o meu projeto que é a minha solução e o meu projeto de teste.

O projeto de teste com o xUnit - vou fechar aqui - ele já criou uma estrutura básica para mim: uma classe de teste e um método de teste. Os métodos de teste, basicamente, são anotados com [Fact] no xUnit, nós vamos ver com mais detalhes isso mais para frente, mas eu tenho o meu método de teste aqui, eu vou escrever o meu código de teste.

Mas preciso fazer uma configuração ainda, antes de começar a escrever o meu teste propriamente dito. Então, na minha solução de teste, no meu projeto de teste, aliás, botão direito e vou adicionar uma referência ao meu projeto. Eu vou clicar em "Adicionar > Referência de Projeto..." e vou adicionar o projeto "Alura.Estacionamento".

Por que fazer essa configuração? Para que o meu projeto de teste reconheça, consiga enxergar o meu projeto, o alvo do meu teste, que é o Alura Estacionamento. Eu vou renomear, fazer umas configurações aqui. Eu vou aproveitar essa classe "UnitTest1.cs" e vou testar, primeiramente, a classe veículo.

Então para eu saber que eu estou testando a classe veículo, eu vou renomear o meu arquivo, vou chamar de "VeiculoTestes.cs". Esse aviso é só para mudar, alterar as referências de código. Perfeito.

Então a minha classe agora "VeiculoTestes.cs" tem um método anotado com [Fact] e vou testar da minha classe “veículo”. Só retornando à minha classe "Veiculo.cs", que está em "Alura.Estacionamento.Modelos", eu tenho os métodos Acelerar e Frear.

O Acelerar, ele recebe como parâmetro um inteiro, o Frear também. Eles trabalham em cima da propriedade VelocidadeAtual. No Acelerar, ele vai multiplicar por 10 e incrementar a velocidade atual, no Frear ele vai multiplicar por 15 e decrementar da velocidade atual.

Voltando à minha classe de testes, eu vou escrever um teste primeiramente para o acelerar, public void TestaVeiculoAcelerar(), só para eu saber qual método da classe eu quero testar nesse momento. Eu vou iniciar, criei uma instância de veículo para poder invocar o método acelerar e verificar o resultado, a propriedade velocidade atual.

var veiculo = new Veiculo(); - aqui é veículo. Ele não reconheceu ainda, eu tenho que importar o name space, vou adicionar aqui e clicar. Perfeito. Agora veiculo.Acelerar();, você vai acelerar e eu vou passar (10); como parâmetro. Então o que eu espero de resultado da propriedade de velocidade atual? "10 x 10 = 100", então o valor dessa propriedade tem que ser 100.

No xUnit eu tenho a classe assert, que permite eu fazer essas verificações, essas validações do resultado esperado, segundo a execução de um determinado método, ou execução de uma determinada propriedade. Então Assert.Equal();. O que eu espero de resultado? (100, );. Mas verificando onde? No (100, veiculo.VelocidadeAtual);.

Então eu espero que o resultado seja 100. Eu escrevi o meu primeiro código de teste. Eu vou clicar nessa última aba do meu lado esquerdo - vou minimizar o menu do lado direito, o solutions explorer - e vou abrir do meu lado esquerdo o meu gerenciador de testes. Essa ferramenta, que vamos entrar em detalhes um pouco mais à frente, me permite verificar os testes que já foram escritos, gerenciar de uma maneira bem visual e bem bacana.

Eu tenho a classe "VeiculoTestes" e o método de teste, "TestaVeiculoAcelerar". Isso que agora eu vou testar, executar esse código. Aqui, no gerenciador de testes, vou clicar em executar. Perfeito, passou no método de teste.

Está verde está ok. Eu criei um método de teste que testa o método acelerar do meu veículo. Vou fazer a mesma coisa para o frear. [Fact], que é a anotação que eu vou utilizar para o método de teste, que é do xUnit. public void TestaVeiculoFrear(). Então var veiculo = new Veiculo();.

veiculo.Frear();, eu vou passar um parâmetro (15);. O que eu espero de saída? Eu criei uma instância de veículo, foi frear com 15, ele vai multiplicar por 10 e subtrair da velocidade atual, da propriedade do veículo, então o resultado é -150. Assert.Equal (-150,), que é o que eu espero. Onde eu vou verificar isso? Em (-150, veiculo.VelocidadeAtual);.

Ponto e vírgula, salvei. Vou testar agora o meu método de teste, vou executar o método de teste, "TestaVeiculoFrear". Cliquei em cima do método, no menu esquerdo, vou clicar em "Executar" - botão direito, "Executar". Vou executar tudo de novo. O frear deu um erro. Está dando o que como resultado? Expectativa -150, o atual -225. Deixa eu ver o método frear, "Veiculo". Eu tenho que passar 10.

Eu passei 15, está certo, não vai passar. Eu tenho que passar 10, então o resultado será -150, veiculo.Frear(10);. Salvei e vou executar agora o método de teste, "Executar". Vou executar todos aqui. Passou.

Funcionou. Escrevemos os nossos primeiros códigos de teste, configurando a nossa solução para um novo projeto de teste com o xUnit.

Sobre o curso Testes em .NET: testando software

O curso Testes em .NET: testando software possui 143 minutos de vídeos, em um total de 44 atividades. Gostou? Conheça nossos outros cursos de .NET em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda .NET acessando integralmente esse e outros cursos, comece hoje!

Plus

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$85
à vista R$1.020
Matricule-se

Pro

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$120
à vista R$1.440
Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas