<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aguiar Dev</title>
    <description>The latest articles on DEV Community by Aguiar Dev (@aguiardev).</description>
    <link>https://dev.to/aguiardev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1296078%2F875e0d03-5ad3-49ba-b05d-1a566063013d.png</url>
      <title>DEV Community: Aguiar Dev</title>
      <link>https://dev.to/aguiardev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aguiardev"/>
    <language>en</language>
    <item>
      <title>Testes unitários: Reaproveitando casos de teste com C#</title>
      <dc:creator>Aguiar Dev</dc:creator>
      <pubDate>Fri, 16 May 2025 21:15:42 +0000</pubDate>
      <link>https://dev.to/aguiardev/testes-unitarios-reaproveitando-casos-de-teste-com-c-5a0g</link>
      <guid>https://dev.to/aguiardev/testes-unitarios-reaproveitando-casos-de-teste-com-c-5a0g</guid>
      <description>&lt;p&gt;No &lt;a href="https://dev.to/aguiardev/testes-unitarios-cobertura-de-testes-363g"&gt;artigo anterior&lt;/a&gt; da série sobre Testes Unitários, aprendemos a identificar a cobertura de testes através de um relatório e notamos que nossa classe não está totalmente testada. Na terceira e última parte desta série vamos criar outro caso de teste para validar aquela condição que nos retorna -1. Para que isso aconteça temos 3 cenários diferente que nos levam a este mesmo resultado:&lt;/p&gt;

&lt;p&gt;Se o primeiro parâmetro for menor que zero.&lt;br&gt;
Se o segundo parâmetro for menor que zero.&lt;br&gt;
Se ambos os parâmetros forem menores que zero.&lt;br&gt;
A primeira coisa que pensamos em fazer é criar um caso de teste para cada alternativa, mas isso não será necessário. Vamos criar apenas um caso e reaproveitá-lo. Assim como um método, podemos fazer com que o nosso caso de teste aceite parâmetros! Nosso novo caso de teste ficará dessa forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Theory(DisplayName = "Given invalid numbers, when sum then should fail.")]
[InlineData(-5, 7)]
[InlineData(10, -8)]
[InlineData(-11, -3)]
public void GivenInvalidNumbers_WhenSum_ThenShouldFail(int firstNumber, int secondNumber)
{
    //arrange
    const int resultExpected = -1;

    //act
    var resultActual = Calculator.Sum(firstNumber, secondNumber);

    //assert
    Assert.Equal(resultExpected, resultActual);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Utilizaremos a notação Theory no lugar de Fact e adicionaremos abaixo a notação InlineData. Esta notação suporta quantos valores precisarmos. Como nosso método precisa de dois parâmetros, informaremos dois valores. E repetiremos a notação três vezes, uma para cada cenário de teste. Dessa forma, com apenas um método de teste conseguimos validar três cenários. E por fim, no método de teste adicionamos parâmetros que receberão os valores que definimos em cada notação InlineData. Agora vamos gerar o relatório novamente. Obs: para isso precisamos executar o comando que gera o arquivo XML e o comando para gerar o relatório. O comando que instala o ReportGenerator só precisa ser executado uma vez.&lt;/p&gt;

&lt;p&gt;Agora em nosso relatório todas as linhas ficaram verdes!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyit17md4o2fhsee7kipo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyit17md4o2fhsee7kipo.png" alt="Image description" width="571" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E assim concluímos os testes da nossa classe. Testes unitários não é um bicho de sete cabeças. O que o torna complicado, na maioria das vezes, é o sistema que está sendo testado e por causa disso muitos desistem de aprender sobre ou aplicá-los. Um sistema não orientado a testes trará muitos desafios, porém muito aprendizado e certamente elevará a qualidade do seu código. Eu espero ter lhe ajudado a dar o primeiro passo no mundo dos testes. Até a próxima!&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>unittest</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Testes unitários: Cobertura de testes</title>
      <dc:creator>Aguiar Dev</dc:creator>
      <pubDate>Fri, 02 May 2025 22:24:08 +0000</pubDate>
      <link>https://dev.to/aguiardev/testes-unitarios-cobertura-de-testes-363g</link>
      <guid>https://dev.to/aguiardev/testes-unitarios-cobertura-de-testes-363g</guid>
      <description>&lt;p&gt;No &lt;a href="https://dev.to/aguiardev/primeiros-testes-unitarios-em-c-com-xunit-parte-1-1pp9"&gt;artigo anterior&lt;/a&gt; aprendemos como organizar nosso teste, como definir um bom nome para ele utilizando a técnica GIven-When-Then e fizemos o nosso primeiro método. Porém nossa classe não está totalmente testada! Existe uma métrica chamada de “cobertura de testes”. Ela nos diz quantos por cento do nosso sistema está testado. Lembre-se de que o método Sum possui uma condição! Caso um dos parâmetros de entrada seja menor que zero e o método de teste não validou este cenário. Usamos somente números acima de zero!&lt;/p&gt;

&lt;p&gt;Obs: lembrando que você pode encontrar &lt;a href="https://github.com/aguiardev/primeiros-testes-unitarios-csharp-com-xunit" rel="noopener noreferrer"&gt;neste link&lt;/a&gt; o projeto usado como base pro artigo.&lt;/p&gt;

&lt;p&gt;O fluxograma abaixo ilustra o funcionamento do método que estamos testando:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pb2203gzdtsnk40569c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pb2203gzdtsnk40569c.png" alt="O fluxograma abaixo ilustra o funcionamento do método que estamos testando" width="768" height="696"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Um relatório facilitaria visualizar a cobertura de testes e, para a nossa sorte, isso já existe! O pacote coverlet.collector é adicionado por padrão ao se criar um projeto de teste com o MSTest ou xUnit. O Coverlet é uma biblioteca com o objetivo de medir a cobertura de código em projetos .NET.&lt;br&gt;
O primeiro passo é abrir seu terminal favorito e navegar até o diretório do projeto de teste. Então execute o comando abaixo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet test --collect:"XPlat Code Coverage"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ele vai criar uma pasta chamada TestResults e dentro dela uma pasta com um nome aleatório. E nessa pasta um arquivo no formato XML chamado coverage.cobertura.xml contendo os indicadores de cobertura.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphsnpat6f8m1bn2c5e3d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphsnpat6f8m1bn2c5e3d.png" alt="Arquivo XML com dados de cobertura de teste" width="800" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Obs: cada vez que você executar o comando, uma nova pasta com um novo arquivo será gerado.&lt;br&gt;
Agora precisamos instalar a ferramenta de linha de comando ReportGenerator através deste comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet tool install --global dotnet-reportgenerator-globaltool
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esta ferramenta usará como base o arquivo XML que geramos para criar o relatório. Navegue até o diretório onde ele foi criado e execute o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;reportgenerator -reports:"coverage.cobertura.xml" -targetdir:"coveragereport" -reporttypes:HTML
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como resultado teremos a geração do diretório coveragereport contendo um site estático.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuz6kqz3j27uteb2monam.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuz6kqz3j27uteb2monam.png" alt="Arquivos gerados para visualização do relatório em HTML" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Acessando o arquivo index.html aparecerá um sumário com a cobertura de testes. E podemos perceber que no card branch coverage está indicando que temos 50% de cobertura.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdfiemefdks3a5lj81vi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdfiemefdks3a5lj81vi.png" alt="Visualização do relatório e suas métricas" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mais abaixo temos uma lista das classes que estão disponíveis no projeto que está sendo testado e o indicador individual da cobertura de teste. Ao clicar na classe Calculator você terá esta visão:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8x6gmhkvhp90puuv0f0n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8x6gmhkvhp90puuv0f0n.png" alt="Visualização dos detalhes de um arquivo no relatório" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repare que temos algumas cores indicativas em cada linha:&lt;br&gt;
Verde: indica que nosso teste testou aquela linha.&lt;br&gt;
Amarelo: exibido em condicionais (como if ou swicth) e indicam que não testamos todas as possibilidades possíveis.&lt;br&gt;
Vermelho: nenhum teste está validando aquela linha.&lt;br&gt;
Cinza: não é testável.&lt;/p&gt;

&lt;p&gt;Você pode encontrar mais detalhes do ReportGenerator e todas as suas opções através &lt;a href="https://reportgenerator.io/usage" rel="noopener noreferrer"&gt;deste link&lt;/a&gt;. Agora que aprendemos a identificar a nossa cobertura de testes, na continuação deste artigo vamos testar as partes restantes da nossa classe.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>unittest</category>
    </item>
    <item>
      <title>Primeiros testes unitários em C# com xUnit</title>
      <dc:creator>Aguiar Dev</dc:creator>
      <pubDate>Fri, 04 Apr 2025 23:09:08 +0000</pubDate>
      <link>https://dev.to/aguiardev/primeiros-testes-unitarios-em-c-com-xunit-parte-1-1pp9</link>
      <guid>https://dev.to/aguiardev/primeiros-testes-unitarios-em-c-com-xunit-parte-1-1pp9</guid>
      <description>&lt;p&gt;Se você começou na programação há pouco tempo e está procurando aprender sobre testes unitários, saiba que está em um ótimo caminho! Ao se aprofundar em testes unitários, por consequência, você estará em contato com princípios como SOLID, por exemplo. Só nessas letrinhas há muito aprendizado que lhe recomendo fortemente a buscar aprender mais sobre, mas neste artigo focaremos no seu primeiro teste. E não há como falar sobre testes unitários sem citar a famosa pirâmide de testes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F65w98nfk2wvvo641dnt8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F65w98nfk2wvvo641dnt8.png" alt="Image description" width="560" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Existem diversos tipos de teste, mas na pirâmide estão os mais populares. O que você precisa entender é que em direção ao topo estão os testes mais demorados de se fazer e mais caros também. Se tratando dos testes unitários, eles são os mais rápidos e baratos de se fazer. Agora eu preciso de te contar alguns fatos sobre testes unitários que julgo importante você saber:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Testes aumentam a qualidade do software, mas não o torna à prova de falhas.&lt;/li&gt;
&lt;li&gt;Alguns testes geram mais código do que o próprio código que está sendo testado.&lt;/li&gt;
&lt;li&gt;Se o software não foi orientado a testes durante seu desenvolvimento, certamente parte dele será refatorado.&lt;/li&gt;
&lt;li&gt;Não precisamos testar 100% do sistema. Isso não faz sentido em termos de tempo/custo e nem todo o sistema possui regras em todos os lugares. Testamos pontos sensíveis ou onde há regras de negócio.&lt;/li&gt;
&lt;li&gt;Nem tudo pode ser testado de forma unitária. Testes unitários em hipótese alguma acessam banco de dados ou serviços externos como uma API por exemplo.&lt;/li&gt;
&lt;li&gt;Testes unitários precisam ser rápidos. E quando digo rápido, estou falando de algo muito inferior a um segundo. Caso contrário seu teste precisa ser revisto.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conhecendo os projetos
&lt;/h2&gt;

&lt;p&gt;O projeto que usarei neste artigo foi construído usando dotnet 6 e você o encontra &lt;a href="https://github.com/aguiardev/primeiros-testes-unitarios-csharp-com-xunit" rel="noopener noreferrer"&gt;neste link&lt;/a&gt;. O framework de testes que utilizaremos é o &lt;a href="https://xunit.net/" rel="noopener noreferrer"&gt;xUnit&lt;/a&gt;. Existem outros como o MsTest feito pela própria Microsoft e o &lt;a href="https://nunit.org/" rel="noopener noreferrer"&gt;nUnit&lt;/a&gt; que inicialmente era um porte do jUnit (framework de teste para Java) e posteriormente seria totalmente reescrito. Bom, talvez agora você se pergunte por que estamos utilizando o xUnit. Eu o utilizo por ser mais simples e manter uma instância única por método de teste. Você pode encontrar mais detalhes &lt;a href="https://www.clariontech.com/blog/why-should-you-use-xunit-a-unit-testing-framework-for-.net#:~:text=xUnit%20is%20far%20more%20flexible,NotEqual%2C%20InRange%2C%20%26%20NotInRange" rel="noopener noreferrer"&gt;neste artigo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Há dois projetos em nossa solução. O primeiro é um class library que contém somente uma classe sendo uma representação de uma calculadora. A classe possui um método que realiza a soma de dois valores. E este método soma somente números maiores ou iguais a zero. Se um dos parâmetros for negativo, o método retorna -1 por padrão.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;Sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;firstNumber&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;secondNumber&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;firstNumber&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="p"&gt;||&lt;/span&gt; &lt;span class="n"&gt;secondNumber&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;firstNumber&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;secondNumber&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O outro projeto é onde está o nosso teste. Para criar o projeto de teste:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se estiver utilizando o Visual Studio, procure por xUnit Test Project.&lt;/li&gt;
&lt;li&gt;Se estiver utilizando a linha de comando, utilize dotnet new xunit -o .&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora vamos conhecer nossa classe de teste. A única diferença dela para uma classe comum é que você precisa usar a notação fact para que o método seja reconhecido como um método de teste.&lt;/p&gt;

&lt;h2&gt;
  
  
  Organizando o teste
&lt;/h2&gt;

&lt;p&gt;O código de teste precisa estar organizado, assim como o código do sistema. Se alguma regra do sistema mudar, o teste precisará de manutenção. E uma boa prática para isso é definir três áreas dentro de cada método de teste:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arrange: nesta seção você prepara todo o setup do seu teste criando as variáveis que serão utilizadas.&lt;/li&gt;
&lt;li&gt;Act: aqui você invoca o método que será testado.&lt;/li&gt;
&lt;li&gt;Assert: aqui você coloca as verificações que serão necessárias para garantir que seu teste deu certo ou não.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essas “seções” são meramente comentários para fins de organização. Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Fact&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Test1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//arrange&lt;/span&gt;

    &lt;span class="c1"&gt;//act&lt;/span&gt;

    &lt;span class="c1"&gt;//assert&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A princípio você pode não ver tanto valor, mas te garanto que isso fará diferença em casos mais complexos.&lt;/p&gt;

&lt;p&gt;E agora vamos falar sobre o nome do seu método de teste. Eu costumo utilizar uma técnica chamada Given-When-Then. A ideia é que tenhamos um template que terá estas três palavras definidas. Esta abordagem faz parte do BDD, mas o conceito se aplica a qualquer coisa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nomenclaturas
&lt;/h2&gt;

&lt;p&gt;E agora vamos falar sobre o nome do seu método de teste. Eu costumo utilizar uma técnica chamada Given-When-Then. A ideia é que tenhamos um template que terá estas três palavras definidas. Esta abordagem faz parte do BDD, mas o conceito se aplica a qualquer coisa.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Given: define o cenário/situação que deve acontecer para que o requisito aconteça.&lt;/li&gt;
&lt;li&gt;When: este é o gatilho da situação.&lt;/li&gt;
&lt;li&gt;Then: resultado esperado após o ter acontecido o gatilho.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Considerando que iremos testar o método Sum, o nosso método ficaria assim: GivenValidNumbers_WhenSum_ThenShouldSucccess&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Obs:&lt;/strong&gt; somente nos métodos de teste eu costumo usar underlines para separar cada grupo: Given-When-Then.&lt;/p&gt;

&lt;p&gt;Ainda sobre nomenclaturas, podemos deixar o nosso descritível como a linguagem humana. Na notação Fact podemos utilizar um atributo chamado DisplayName e informar uma string que será exibida no lugar do método no test explorer (no Visual Studio/VS Code) ou na linha de comando. Nosso método ficaria assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Fact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DisplayName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Given valid numbers, when sum then should succcess."&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E na linha de comando, por exemplo, ficaria assim. Muito mais amigável, não?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmm42zvrynuhtz56r3cqo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmm42zvrynuhtz56r3cqo.png" alt="Image description" width="697" height="184"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora que nosso caso de teste está muito bem descrito, vamos implementar nosso primeiro teste! Ele ficará dessa forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Fact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DisplayName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Given valid numbers, when sum then should succcess."&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;GivenValidNumbers_WhenSum_ThenShouldSucccess&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//arrange&lt;/span&gt;
    &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;resultExpected&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;firstNumber&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;secondNumber&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;//act&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;resultActual&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Calculator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;firstNumber&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;secondNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;//assert&lt;/span&gt;
    &lt;span class="n"&gt;Assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resultExpected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;resultActual&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Na seção arrange preparamos as variáveis que serão utilizadas como parâmetro no método Sum. E a variável resultExpected tem pré-definido o valor que esperamos que o método retorne e utilizaremos para comparar ao final. Você não é obrigado a usar constantes ou invés de variáveis, mas como o valor não será alterado ao longo do nosso teste, prefiro utilizá-las.&lt;/p&gt;

&lt;p&gt;Na seção act invocamos o método que será testado e armazeno numa variável o seu retorno para verificá-lo na seção seguinte.&lt;/p&gt;

&lt;p&gt;E por fim, na seção assert, utilizaremos a classe de mesmo nome fornecida pelo xUnit para verificar se o valor que o método testado retornou confere com o que esperamos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observação 1:&lt;/strong&gt; ao invés de utilizarmos variáveis para guardar os valores que serão posteriormente serão utilizadas em no método que será testado, por que não informamos os valores diretamente no método? Afinal de contas, serão duas variáveis a menos, não? Sim, serão duas variáveis a menos, mas a ideia aqui é dar contexto ao teste. Diga não aos “números mágicos”.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observação 2:&lt;/strong&gt; costumo nomear com o sufixo Expected a variável que terá o valor que espero no teste, e com o sufixo Actual a variável que tem o valor da execução do nosso método. E de onde eu tirei isso? Se você olhar o reparar nos parâmetros do método Assert.Equal, eles possuem justamente estes nomes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8aj7rfdcg9kxc4emk5hm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8aj7rfdcg9kxc4emk5hm.png" alt="Image description" width="417" height="88"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora nós executamos nosso teste, verificamos que passou com sucesso e acabou. Certo? Na verdade, não! Existe uma métrica chamada de cobertura de testes e vamos aprender sobre ela na continuação deste artigo.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>unittest</category>
    </item>
  </channel>
</rss>
