Welcome to GASP Sign in | Join | Help

Paulo Morgado

Tudo sobre Arquitectura de Software

Localização dos Visitantes

  • Localização dos Visitantes

Livros

  • LINQ com C#

Eventos

Renûncia

As opiniões e pontos de vista expressos neste sítio são minhas e podem não reflectir as da Microsoft, do meu empregador, ou de qualquer comunidade a que pertença. Qualquer código ou opinião é oferecido sem qualquer garantia. Os produtos ou serviços mencionados são comprados por mim, disponibilizados pelo meu empregador ou pelo fabricante/vendedor o que não influencia em nada a minha opinião.

Melhorando Testes E Depuração Através de Asserções

Lendo o blogue The Typemock Insider, deparei-me com esta entrada do Gil Zilberfeld.

Eu tendo muito a caír na prática do Gil’s ("binary search" debugging), mas não acho que o Kent Beck tenha encontrado a solução.

A sugestão do Gil para usar o Isolator é tentadora (eu não perco uma oportunidade de o usar), mas não é a minha favorita.

Eu prefiro usar debug assertions (asserções de depuração). As asserções de depuração podem ser usadas quando se corre uma versão de depuração da aplicação para que nos seja mostrada uma janela com as mensagens de asserção ou, quando se correm testes unitários, para os fazer falhar.

Para se poderem usar asserções de depuração em testes unitários é necessário um trace listener “especial” que faça o teste falhar quando o seu método Fail é chamado.

public class UnitTestTraceListener : global::System.Diagnostics.DefaultTraceListener
{
     public UnitTestTraceListener() : base()
    {
        this.Name = "UnitTest";
        this.AssertUiEnabled = false;
    }

    public override void Fail(string message, string detailMessage)
    {
        Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Fail("Debug.Assert Failed: " + message + " " + detailMessage);
    }
}

Agora basta registá-lo.

O registo do trace listener ser feito em código:

System.Diagnostics.Trace.Listeners.Remove("Default");
System.Diagnostics.Trace.Listeners.Add(new UnitTestTraceListener());

ou por configuração:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <assert assertuienabled="false"/>
    <trace>
      <listeners>
        <clear/>
        <add name="UnitTest" type="UnitTestTraceListener"/>
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

E, se estiver a ser usado o Isolator, há que ter em conta os acesso feitos nas chamadas ao método Assert. Mais diversão para mim.

Posted: Wednesday, December 03, 2008 3:08 AM by Paulo Morgado

Comments

No Comments

Anonymous comments are disabled