Testes unitários no C# com o xUnit \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 21 Horas 

 56 Min 

 12 Seg 

   Tempo restante da oferta: 21 56 12 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Testes unitários no C# com o xUnit  [ Testes e Projetos ](https://www.treinaweb.com.br/blog/categoria/testes-e-projetos) [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) [ .NET Core ](https://www.treinaweb.com.br/blog/categoria/net-core) 

# Testes unitários no C# com o xUnit

 Testes unitários ajudam a garantir a qualidade de uma aplicação. Uma forma de garantir isso no C# é através da biblioteca xUnit. Veja como como utilizá-la.

 [ Wladimilson M. Nascimento ](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento) 7 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/09/30170147/XUNIT.png)  

No [meu último artigo comentei](https://www.treinaweb.com.br/blog/teste-unitarios-no-c-com-o-nunit/) sobre o hábito de sempre adicionar testes unitários as aplicações que desenvolvo e sobre o meu desejo de criar uma série de artigos abordando as bibliotecas de testes unitários do C#. Então dando continuidade a este tema, neste artigo abordarei a biblioteca [xUnit](https://xunit.net/).

## Conhecendo a biblioteca xUnit

O xUnit é uma biblioteca open source de testes unitários, que foi criada pelo mesmo criador da segunda versão do NUnit, [James Newkirk](https://github.com/jnewkirk). Desta forma, ambas as bibliotecas possuem funcionalidades similares.

## Criando o projeto que será testado

Como no artigo anterior, para exemplificar a biblioteca xUnit, iremos criar uma solução:

```dos
dotnet new sln -n teste-unitario-com-xunit

```

E nela adicionar uma biblioteca de classes:

```dos
dotnet new classlib -n calculos

```

Que conterá uma classe `Calculadora`:

```csharp
public class Calculadora
{
    public int Soma(int operador1, int operador2) => operador1 + operador2;
    public int Subtracao(int operador1, int operador2) => operador1 - operador2;
    public int Multiplicao(int operador1, int operador2) => operador1 * operador2;
    public int Divisao(int dividento, int divisor) => dividento / divisor;
    public (int quociente, int resto) RestoDivisao(int dividento, int divisor) => (dividento / divisor, dividento % divisor);
}

```

Adicione a referência deste projeto na solução:

```dos
dotnet sln teste-unitario-com-xunit.sln add calculos/calculos.csproj

```

## Criando o projeto de teste

Um projeto de teste trata-se de uma biblioteca de classe que contenha a referência `xunit`. Felizmente no .NET Core, há a opção de um template de projeto já com esta biblioteca adicionada. Para criar este tipo de projeto utilize o comando abaixo:

```dos
dotnet new xunit -n calculos.tests

```

Adicione este projeto na solução:

```dos
dotnet sln teste-unitario-com-xunit.sln add calculos.tests/calculos.tests.csproj

```

E adicione nele a referência da biblioteca de cálculos nele:

```dos
dotnet add calculos.tests/calculos.tests.csproj reference calculos/calculos.csproj

```

Pronto, agora podemos adicionar testes unitários na nossa aplicação.

## Adicionando testes unitários

No projeto de teste criado, remova o arquivo **UnitTest1.cs** e adicione uma classe chamada `CalculadoraTest`, nela adicione o método abaixo:

```csharp
public class CalculadoraTest
{
    [Fact]
    public void Soma_DeveRetornarOValorCorreto()
    {
        Calculadora c = new Calculadora();
        var resultado = c.Soma(10, 20);
        //Verifica se o resultado é igual a 30        
        Assert.AreEqual(30, resultado);
    }
}

```

Note que no código acima é utilizado o atributo em cima do método `Soma_DeveRetornarOValorCorreto`. Isso indica que este é um método de teste. É a graças a ele que os tests runner sabem qual método deve ser chamado quando um teste é iniciado.

Este teste pode ser executado através do comando `dotnet test`, o [**Test Explorer**](https://docs.microsoft.com/pt-br/visualstudio/test/improve-code-quality) do Visual Studio ou o [xUnit Runner Console](https://www.nuget.org/packages/xunit.runner.console/).

Com o teste definido, ele pode ser executado:

```dos
dotnet test

```

Onde teremos resultado:

![](https://dkrn4sk0rn31v.cloudfront.net/2019/09/30170137/teste-unitario-xunit-1.png)

Note que ele indica que o teste definido passou.

[  ![C# (C Sharp) - TDD](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/csharp-tdd.svg)   Curso C# (C Sharp) - TDD Conhecer o curso ](https://www.treinaweb.com.br/curso/csharp-avancado-tdd)

Também é possível criar uma “teoria”. Teoria executa o mesmo teste com uma série de parâmetros. Caso algum dos parâmetros gere um resultado inesperado, ela é considerada falha.

```csharp
[Theory]
[InlineData(1)]
[InlineData(2)]
[InlineData(3)]
[InlineData(5)]
public void RestoDivisao_DeveRetornarZero(int value)
{
    Calculadora c = new Calculadora();
    var resultado = c.RestoDivisao(12, value);
    //Verifica se o resto da divisão é 0
    Assert.Equal(0, resultado.resto);
}

```

Repare que a teoria é definida com a anotação `Theory` e que cada parâmetro testado é indicado pela anotação `InlineData`.

Caso o teste falhe, é indicado com qual valor isso ocorreu:

![](https://dkrn4sk0rn31v.cloudfront.net/2019/09/30170137/teste-unitario-xunit-2.png)

Para finalizar e para obtermos uma [cobertura dos testes](https://www.treinaweb.com.br/blog/analisando-cobertura-de-testes-em-aplicacoes-net-com-o-opencover/) de 100%, vamos definir testes para os demais métodos de `Calculadora`:

```csharp
public class CalculadoraTest
{
    [Fact]
    public void Soma_DeveRetornarOValorCorreto()
    {
        Calculadora c = new Calculadora();
        var resultado = c.Soma(10, 20);
        //Verifica se o resultado é igual a 30        
        Assert.Equal(30, resultado);
    }

    [Theory]
    [InlineData(1)]
    [InlineData(2)]
    [InlineData(3)]
    public void RestoDivisao_DeveRetornarZero(int value)
    {
        Calculadora c = new Calculadora();
        var resultado = c.RestoDivisao(12, value);
        //Verifica se o resto da divisão é 0
        Assert.Equal(0, resultado.resto);
    }

    [Fact]
    public void RestoDivisao_DeveRetornarOValorCorreto()
    {
        Calculadora c = new Calculadora();
        var resultado = c.RestoDivisao(10, 3);
        //Verifica se o quociente da divisão é 3 e o resto 1
        Assert.Equal(3, resultado.quociente);
        Assert.Equal(1, resultado.resto);
    }

    [Fact]
    public void Subtracao_DeveRetornarOValorCorreto()
    {
        Calculadora c = new Calculadora();
        var resultado = c.Subtracao(20, 10);
        //Verifica se o resultado é igual a 10
        Assert.Equal(10, resultado);
    }

    [Fact]
    public void Divisao_DeveRetornarOValorCorreto()
    {
        Calculadora c = new Calculadora();
        var resultado = c.Divisao(100, 10);
        //Verifica se o resultado é igual a 10
        Assert.Equal(10, resultado);
    }

    [Fact]
    public void Multiplicao_DeveRetornarOValorCorreto()
    {
        Calculadora c = new Calculadora();
        var resultado = c.Multiplicao(5, 2);
        //Verifica se o resultado é igual a 10
        Assert.Equal(10, resultado);
    }
}

```

## Demais comparadores do xUnit

O exemplo mostrado aqui é simples, nele fazemos uso apenas do comparador `Assert.Equal`. Para o caso do exemplo apenas este comparador foi necessário. Agora sempre que um método da classe for alterado, os testes podem ser executados para verificar se a alteração gerou algum impacto nos demais métodos dela.

Infelizmente a documentação do xUnit não explica os comparadores que podem ser utilizados com a biblioteca. Eles só são listados [na comparação com outras bibliotecas de teste](https://xunit.net/docs/comparisons).

Caso seja adicionada alguma referência para eles na documentação, a adicionarei aqui posteriormente.

Por hoje é isso. No meu próximo artigo falarei do MSTest, até lá!

- [ #C# ](https://www.treinaweb.com.br/blog/tag/csharp)
- [ #Testes unitários ](https://www.treinaweb.com.br/blog/tag/testes-unitarios)
- [ #xUnit ](https://www.treinaweb.com.br/blog/tag/xunit)

Autor

 ![Wladimilson M. Nascimento](//secure.gravatar.com/avatar/f0dd442f156a3eacd2880e9cd0eafbd1?d=mm)

## Wladimilson M. Nascimento

 Instrutor, nerd, cinéfilo e desenvolvedor nas horas vagas. Graduado em Ciências da Computação pela Universidade Metodista de São Paulo. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/10/17134625/MSTEST-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     7 anos atrás

    ##  [ Testes unitários no C# com MSTest ](https://www.treinaweb.com.br/blog/testes-unitarios-no-c-com-mstest) 

     Testes unitários ajudam a garantir a qualidade de uma aplicação. Uma forma de garantir isso no C# é através da biblioteca MSTest. Veja como como utilizá-la.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/09/12175052/NUNIT-400x280.png)  [ Testes e Projetos ](https://www.treinaweb.com.br/blog/categoria/testes-e-projetos) 

     7 anos atrás

    ##  [ Teste unitários no C# com o NUnit ](https://www.treinaweb.com.br/blog/teste-unitarios-no-c-com-o-nunit) 

     Testes unitários ajudam a garantir a qualidade de uma aplicação. No C# temos a biblioteca NUnit. Veja aqui como adicioná-la no seu projeto.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/02/c-sharp-consumindo-apis-com-flurl-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     6 anos atrás

    ##  [ C# - Testando requisições com Flurl ](https://www.treinaweb.com.br/blog/c-testando-requisicoes-com-flurl) 

     Implemente testes unitários em requisições HTTP com o auxílio de Flurl.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/10/06103451/cobertura-codigos-testes-automatizados-400x280.jpg)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     9 anos atrás

    ##  [ Analisando a cobertura de testes em aplicações .NET com o OpenCover ](https://www.treinaweb.com.br/blog/analisando-cobertura-de-testes-em-aplicacoes-net-com-o-opencover) 

     Conheça o OpenCover, ferramenta open-source para análise de cobertura de testes.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/06/IDE-CSHARP-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     6 anos atrás

    ##  [ Principais IDEs para desenvolvimento C# ](https://www.treinaweb.com.br/blog/principais-ides-para-desenvolvimento-c) 

     Veja neste artigo as principais IDEs para desenvolvimento C#.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/depura--o-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     10 anos atrás

    ##  [ Depuração de código PHP ](https://www.treinaweb.com.br/blog/depuracao-de-codigo-php) 

     Como fazer a depuração de código PHP? Essa é uma dúvida recorrente do pessoal que está vindo de outras linguagens ou que está começando a escrever projetos um pouco mais complexos.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/11/04105137/tdd-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     7 anos atrás

    ##  [ Afinal, o que é TDD? ](https://www.treinaweb.com.br/blog/afinal-o-que-e-tdd) 

     Veja nesse artigo como funciona o TDD e quais seus benefícios.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/01/introducao-ao-maven-aprenda-como-criar-e-gerenciar-projetos-java-400x280.png)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     6 anos atrás

    ##  [ Introdução ao Maven, aprenda como criar e gerenciar projetos Java ](https://www.treinaweb.com.br/blog/introducao-ao-maven-aprenda-como-criar-e-gerenciar-projetos-java) 

     Neste artigo veremos como instalar o Maven e como podemos utilizá-lo para nos auxiliar na criação e no gerenciamento de dependência de um projeto Java.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/05/IDE-PHP-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Principais IDEs para desenvolvimento PHP ](https://www.treinaweb.com.br/blog/principais-ides-para-desenvolvimento-php) 

     Veja neste artigo as principais IDEs para desenvolvimento PHP.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/05/IDE-PYTHON-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     7 anos atrás

    ##  [ Principais IDEs para desenvolvimento Python ](https://www.treinaweb.com.br/blog/principais-ides-para-desenvolvimento-python) 

     Veja neste artigo as principais IDEs para desenvolvimento Python.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/relat-rio-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     10 anos atrás

    ##  [ Relatório de cobertura de testes (Code Coverage) com o PHPUnit ](https://www.treinaweb.com.br/blog/relatorio-de-cobertura-de-testes-code-coverage-com-o-phpunit) 

     O PHPUnit é um framework para a criação de testes unitários. Nesse artigo vamos falar sobre a geração de relatórios de cobertura de testes (Code Coverage).

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/10/04103322/ferramentas-php-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Ferramentas essenciais para um projeto PHP ](https://www.treinaweb.com.br/blog/ferramentas-essenciais-para-um-projeto-php) 

     Neste artigo cito as quatro principais ferramentas que considero essenciais para qualquer projeto PHP: PHPUnit, PHPStan, PHP-CS-Fixer e PHP Insights.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **21h 56min 12s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
