A maioria das metodologias disponíveis para o desenvolvimento de software e gerenciamento de projetos incluem como pratica básica essencial o desenvolvimento e execução de testes unitários para que um projeto de desenvolvimento possa passar para próxima fase.
Uma boa execução de um projeto bem elaborado em diversas metodologias utilizam ambientes e exigem que os testes unitários sejam executados no ambiente de desenvolvimento (DEV) utilizando uma ferramenta para este proposito e reexecutados por consultores funcionais/testadores, na fase de testes unitários no ambiente real de qualidade (QAS) para que só então possam executar a fase de testes integrados antes de aprovarem e homologarem o software para utilização em um ambiente produtivo (PRD).
O teste unitário executado do ponto de vista do setor de qualidade (QAS) é feito validando todas as partes dos software, incluindo, design intuitivo, usabilidade, teclas de atalho, layouts, grafia, links e etc. É claro que existem algumas diferenças sutis entre metodologias, como um ou outro procedimento ou diferentes nomenclaturas mas no final todas possuem o mesmo proposito, um software de qualidade, livre de erros e dentro do orçamento inicial do projeto. Bem! No mundo real, não importa qual a metodologia escolhida, isto nem sempre é possível.
Microsoft Unit Test Framework for Managed Code
O framework de testes de unidade da Microsoft para código gerenciado é instalado com o Visual Studio e fornece um framework para testar o código .NET. As ferramentas de teste de unidade do Visual Studio foram desenvolvidas para oferecer suporte a desenvolvedores e equipes que incorporam testes unitários em suas práticas de desenvolvimento de software. Testes de unidade proporcionam aos desenvolvedores e testadores uma maneira rápida para procurar erros de lógica nos métodos de classes em soluções .NET.
Unit Test Framework: http://msdn.microsoft.com/pt-br/library/dd264975.aspx
Executando Testes Unitários no Visual Studio
1 – Crie uma solução C# para o console chamada DATesteUnitario, renomeie o arquivo da classe gerado automaticamente de acordo com a classe do código Participante encontrado logo abaixo. Crie um novo projeto C# para teste chamado DATesteUnitarioTest nesta mesma solução:
2 – No Solution Explorer no projeto DATesteUnitarioTest adicione uma referencia ao projeto DATesteUnitario:
3 – Renomeie a classe criada automaticamente para o projeto de testes para ParticipanteTeste e utilize os métodos do código abaixo, atente-se aos comentários do código fonte para saber mais detalhes sobre os padrões de teste nos objetos C# no Visual Studio.
- Para efetuar um teste com erros, modifique os valores alimentados na propriedade nome e idade nos métodos de teste.
- Para rodar o teste, clique no menu Test e escolha a opção All Tests, o Visual Studio irá abrir uma janela chamada Test Explorer onde será exibido o resultado do teste de seus métodos:
4 – Retorne os valores das propriedades como no código abaixo, selecione os dois métodos com erros na janela Test Explorer e com o botão direito escolha a opção Run Selected Tests:
Exemplo:
Neste exemplo criamos uma simples classe com propriedades Get e Set e uma classe de caso de teste para efetuar um teste unitário nos métodos criados.
C#
Classe – Participante
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DATesteUnitario { public class Participante { // Atributos da classe private string nome; private int idade; // Propriedades public string Nome { get { return nome; } set { nome = value; } } public int Idade { get { return idade; } set { idade = value; // Troque a linha acima por: value = idade; // funciona na sintaxe mas não passa no teste unitário // pois é erro básico de logica e pode ser escrito em // um momento de desatenção. } } static void Main(string[] args) { // Testa classe // Dumb Code - Sem efeito para o teste Participante participante = new Participante(); participante.Idade = 20; participante.Nome = "João da Silva"; Console.ReadKey(); } } }
JUnit Test Case – ParticipanteTeste
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using DATesteUnitario; // Namespace do projeto a ser testado namespace DATesteUnitarioTest { [TestClass] public class ParticipanteTeste { /* * Você pode optar por utilizar métodos Getter e Setter como Java (Bean). * Entretanto na linguagem C# métodos Getter e Setter são substituidos por * propriedades semelhantes a linguagem de programação Object Pascal (Delphi). * * O conceito de testes unitários é utilizado sempre através de métodos Setter (Voids) * pois o mesmo já testa o método de retorno Getter no momento da comparação. * Os métodos testados são os Construtores da classe, métodos Setter ou * outros métodos da classes de sua preferencia. * * O Caso de teste unitário do Projeto de Test C# é bem parecido com o JUnit para Java * utilizando o conceito de Assert e possui os seguintes requisitos: * * O método deve ser decorado com o atributo [TestMethod]. * O método deve retornar void. * O método não pode ter parâmetros. * * Como testar um básico Pattern de Objeto C# * baseados em Get e Set (propriedades em C#) * utilizando voids? * * Podemos utilizar métodos semelhantes ao JUnit do Java, mas atente-se * pois diferentemente do JUnit a classe de teste não está fisicamente ligada * a classe a ser testada e utiliza uma void padrão. * * Método de teste padrão: [TestMethod] public void TestMethod1() { } */ //Testando propriedades [TestMethod] public void Nome() { // Testa propriedade Nome Participante p1 = new Participante(); p1.Nome = "Nome"; Assert.AreEqual("Nome", p1.Nome); } [TestMethod] public void Idade() { // Testa propriedade Idade Participante p2 = new Participante(); p2.Idade = 20; Assert.AreEqual(20, p2.Idade); } } }