quinta-feira, 4 de fevereiro de 2010

C#: Teste de Software com Pex

Objetivo: 

Explicar melhor o que é o Pex, como utilizal-o e suas vantagens, então antes de continuar lendo esse post, por favor, faça o download da versão de estudo, no site:



Mas então o que é o Pex?


é um gerador de Testes Unitários que assim como o nunit usa assertivas de pré-condição  para garantir um teste mais seguro, usando como conceito o test de Caixa Branca, que em linhas gerais seria o teste do código em si, ele vai fazer uso de uma pespectiva do seu código para modelar os casos de teste, e o pex veio para isso, identificar o que poderia "ser testado".


O seu uso é muito simples e vamos ver no decorrer do post.

Qual sua vantagem em relação aos outros metódos de test de software?

Agilidade! com pex (Muitos programadores java vão ficar mais loucos com isso)
apenas alguns clicks ele já monta seu projeto de test, alem de você poder fazer teste em momento de execução. 

"Ao mesmo tempo que se mantém a garantia do software nos permite centralizar os esforços ao desenvolvimento da lógica do negócio. (André Nobre)"


Antes de criar o projeto, vamos executar o instalador do pex que está disponivel no começo desse post, ele ira criar a integração com o visual studio (amo essa IDE) para facilitar nossa vida de nos deixar ainda mais preocupados apenas com o modelo do nosso negócio :)

Agora vamos criar um projeto ClassLibery chamado DAOComponente:


Depois de criar o projeto, vamos adicionar um novo item, uma classe que se chamará CLComparar.

Nossa solução vai ficando assim:




 E na classe  CLComparar vamos  adicionar o seguinte código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DAOComponente
{
    public class CLComparar
    {
        ///
        /// Comparar objetos.
        ///

        public void Comparar()
        {
       
        }
    }
}
e agora vem a mágica:


antes que alguem fale, é meu Visual Studio tem o fundo preto, mas não é para ser matrix não é para nao ficar cansando a vista com a tela branca! :D

Depois de clicar com o botão direito sobre nossa classe e ir em Pex>Create Parameterized Unit Tests ira se abrir uma tela onde teremos algums valores, mas eu não aconselho vocês a mudarem ele agora não, deixa para "bulir" depois do exemplo, vamos deixar como está!


Na proxima tela, ele vai perguntar qual o nome do novo projeto de teste que você deseja criar... vamos colocar: "DAOComponente.Test":


Vamos ver como ficou nossa solução depois do wizard:


Reparem na estrutura criada pelo Pex, para a solução ele adicionou uma pasta com os arquivos de configuração e com o arquivo de metadados que esta ligado ao Test List, se a gente de um duplo click sobre ele, vocês veram a lista de todos os testes do projeto. 

Vamos agora abrir o arquivo de teste "CLCompararTest.cs"gerado pelo Pex:

using System;
using DAOComponente;
using Microsoft.Pex.Framework;
using Microsoft.Pex.Framework.Validation;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace DAOComponente
{
    /// This class contains parameterized unit tests for CLComparar
    [PexClass(typeof(CLComparar))]
    [PexAllowedExceptionFromTypeUnderTest(typeof(InvalidOperationException))]
    [PexAllowedExceptionFromTypeUnderTest(typeof(ArgumentException), AcceptExceptionSubtypes = true)]
    [TestClass]
    public partial class CLCompararTest
    {
        /// Test stub for Comparar()
        [PexMethod]
        public void Comparar([PexAssumeUnderTest]CLComparar target)
        {
            target.Comparar();
            // TODO: AQUI VOCE FAZ OS TESTES ANTES DE IMPLEMENTAR
        }
    }
}

Reparem que ele já criou o nossa função para Comparar (Igual a que ta no nosso componente ) assim podemos testar antes mesmo de implementar no projeto "real" isso é muito bom pois evita muita dor de cabeça depois.
        [PexMethod]
        public void Comparar([PexAssumeUnderTest]CLComparar target)
           {
            target.Comparar();
            // Escreva seu teste aqui!
         }


Não há atualmente nenhuma TestMethod como você esperaria um teste de unidade padrão do Visual Studio. Em vez disso, você tem um PexMethod. Este método é um teste de unidade parametrizadas. Posteriormente, quando você deixar Pex explorar código sob teste, ele criará outra classe parcial que contém os testes de unidade padrão anotados com atributos TestMethod. Esses testes gerados será acessíveis através do Visual Studio Test Editor.

Muito simples, não?!
Mais facil que isso só andar pra frente.

Obrigado e até a próxima.





Nenhum comentário:

Postar um comentário