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.