Ainda em Release Candidate 1 (primeira metade de Março/2016), o desenvolvimento de soluções com o ASP.NET Core 1.0 não conta atualmente com um template específico para a criação de projetos de testes. A inexistência de tal opção pode parecer problemática num primeiro momento. Contudo, há uma alternativa capaz de atender a este tipo de demanda: a implementação de uma Class Library baseada neste novo framework.

O próprio time responsável pela construção do ASP.NET Core 1.0 vem fazendo uso de testes de unidade, empregando para isto o framework xUnit.net na codificação de validações. Logo, a opção pelo xUnit.net acaba acontecendo de forma natural, sendo que o objetivo deste artigo é descrever este processo nas próximas seções.

Implementação de uma Class Library baseada no ASP.NET Core 1.0

Os projetos descritos nesta e na próxima seção foram construídos com o ASP.NET Core 1.0 Release Candidate 1, sendo uma variação de um exemplo que está em:

http://social.technet.microsoft.com/wiki/pt-br/contents/articles/31395.testes-unitarios-com-o-framework-xunit-net.aspx

Inicialmente será implementada uma Class Library chamada “ExemploFinancas”, a partir da seleção do do template “Class Library (Package)” (Imagem 1):

testes-aspnet-01
Imagem 1. Criando o projeto ExemploFinancas

O arquivo project.json deverá ser alterado de forma a se configurar o uso do ASP.NET Core 1.0, conforme indicado na Listagem 1:

{
  "version": "1.0.0-*",
  "description": "ExemploFinancas Class Library",
  "authors": [ "Renato" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",

  "frameworks": {
    "dnx451": { },
    "dnxcore50": {
      "dependencies": {
        "Microsoft.CSharp": "4.0.1-beta-23516",
        "System.Collections": "4.0.11-beta-23516",
        "System.Linq": "4.0.1-beta-23516",
        "System.Runtime": "4.0.21-beta-23516",
        "System.Threading": "4.0.11-beta-23516"
      }
    }
  }
}

Listagem 1: Arquivo project.json (projeto ExemploFinancas)

Na Listagem 2 está a implementação da classe CalculoFinanceiro, a qual possibilitará determinar o valor do total de um empréstimo ao final de um período por meio do método CalcularValorComJurosCompostos:

using System;

namespace ExemploFinancas
{
    public static class CalculoFinanceiro
    {
        public static double CalcularValorComJurosCompostos(
            double valorEmprestimo, int numMeses, double percTaxa)
        {
            return Math.Round(
                valorEmprestimo * Math.Pow(1 + (percTaxa / 100), numMeses), 2);
        }
    }
}

Listagem 2: Classe CalculoFinanceiro

Implementação do projeto de testes

O projeto de testes também será do tipo “Class Library (Package)”, tendo por nome “ExemploFinancas.Testes” (Imagem 2):

testes-aspnet-02
Imagem 2. Criando o projeto ExemploFinancas.Testes

As seguintes alterações serão realizadas no arquivo project.json (Listagem 3):

  • Referências para uso do xUnit.net e do projeto ExemploFinancas deverão ser adicionadas à seção “dependencies”;
  • Na seção “commands” será configurada a execução do xUnit, de maneira que os resultados dos testes apareçam na janela “Test Explorer”;
  • Em frameworks será especificado o uso do ASP.NET Core.
{
  "version": "1.0.0-*",
  "description": "ExemploFinancas.Testes Class Library",
  "authors": [ "Renato" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",

  "dependencies": {
    "ExemploFinancas": "1.0.0-*",
    "xunit": "2.1.0",
    "xunit.runner.dnx": "2.1.0-rc1-build204"
  },

  "commands": {
    "test": "xunit.runner.dnx"
  },

  "frameworks": {
    "dnx451": { },
    "dnxcore50": { }
  }
}

Listagem 3: Arquivo project.json (projeto ExemploFinancas.Testes)

Para a codificação dos testes serão utilizados os valores indicados na Imagem 3:

testes-aspnet-03
Imagem 3. Casos de teste

Já a Listagem 4 traz a classe Testes com as validações correspondentes a cada caso de teste a ser verificado:

  • O método TestarJurosCompostos foi marcado com o atributo “Theory” (classe TheoryAttribute, namespace Xunit), a fim de possibilitar a passagem de valores que equivalem aos vários casos de testes a serem executados;
  • A operação TestarJurosCompostos receberá como parâmetros o valor de um empréstimo, o número de meses para pagamento, o percentual mensal de juros, além do valor total com juros esperado como retorno do método CalcularValorComJurosCompostos (classe CalculoFinanceiro);
  • Com o atributo InlineDataAttribute serão especificados os diferentes casos de teste. Os valores indicados neste elemento serão mapeados para os parâmetros correspondentes de TestarJurosCompostos (a cada execução deste método).
using Xunit;

namespace ExemploFinancas.Testes
{
    public class Testes
    {
        [Theory]
        [InlineData(10000, 12, 2, 12682.42)]
        [InlineData(11937.28, 24, 4, 30598.88)]
        [InlineData(15000, 36, 6, 122208.78)]
        [InlineData(20000, 36, 6, 162945.04)]
        [InlineData(25000, 48, 6, 409846.79)]
        public void TestarJurosCompostos(
                    double valorEmprestimo, int numMeses, double percTaxa,
                    double valorEsperado)
        {
            double valor = CalculoFinanceiro
                .CalcularValorComJurosCompostos(
                    valorEmprestimo, numMeses, percTaxa);
            Assert.Equal(valor, valorEsperado);
        }
    }
}

Listagem 4: Classe Testes

Por fim, será necessário proceder com a compilação dos dois projetos descritos neste artigo. Executar então em seguida os testes, acionando para isto o menu Test > Run > All Tests (Imagem 4):

testes-aspnet-04
Imagem 4. Disparando a execução dos testes

A janela “Test Explorer” trará neste momento o resultado produzido pelos diferentes casos de teste (Imagem 5):

testes-aspnet-05
Imagem 5. Resultado após a execução dos testes

Conclusão

Conforme este post demonstrou, ainda não há um template específico para a criação de projetos de testes envolvendo o uso do ASP.NET Core 1.0. A implementação de testes de unidade para esta plataforma está no momento baseada na utilização do xUnit.net, assim como de bibliotecas/packages seguindo a estrutura deste novo framework Web.

Espero que este conteúdo possa ter sido útil.

Até uma próxima oportunidade!

Referências

ASP.NET Core Documentation
http://docs.asp.net/en/latest/index.html

ASP.NET Core – GitHub
https://github.com/aspnet/Home

xUnit.net
https://xunit.github.io/

Renato Groffe

Atua como consultor em atividades voltadas ao desenvolvimento de softwares há mais de 13 anos. Bacharel em Sistemas de Informação, com especialização em Engenharia de Software. Microsoft Certified Technology Specialist (Web, WCF, Distributed Applications, ADO.NET, Windows Forms), Microsoft Specialist (HTML5 with JavaScript and CSS3, Developing ASP.NET MVC 4 Web Applications), Oracle Certified Associate (PL/SQL), Sun Certified (SCJP, SCWCD), ITIL Foundation V2, Cobit 4.1 Foundation.

Facebook Google+ 

Comentários

comentarios