Pular para o conteúdo
Skillpedia
Testes40 mil · #5098

csharp-tunit

Ajuda seu agente a escrever testes unitários eficientes em C# usando TUnit. Ele ensina as melhores práticas, incluindo como criar testes que usam dados variados.

O que ela faz

Este guia ensina como escrever testes de código eficientes usando TUnit, uma ferramenta para verificar se seu programa funciona corretamente. Ele cobre testes normais e testes com dados variados.

Quando usar

  • ✓Ao criar testes para verificar funcionalidades específicas.
  • ✓Ao precisar testar um código com muitos cenários diferentes.
  • ✓Ao migrar de outra ferramenta de teste como xUnit.

Exemplo do que pedir para a IA

“Como configuro um novo projeto de teste com TUnit?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/github/awesome-copilot/blob/main/skills/csharp-tunit/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/github/awesome-copilot/blob/main/skills/csharp-tunit/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

TUnit ajuda a organizar seus testes de código. Você escreve testes que seguem um padrão (preparar, agir, verificar) e usa atributos especiais para definir como e quando eles rodam, além de verificar os resultados.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add github/awesome-copilot --skill csharp-tunit

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/csharp-tunit/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Melhores Práticas do TUnit

Seu objetivo é me ajudar a escrever testes unitários eficazes com TUnit, cobrindo abordagens de teste padrão e orientadas por dados.

Configuração do Projeto

  • Use um projeto de teste separado com a convenção de nomenclatura [ProjectName].Tests
  • Referencie o pacote TUnit e TUnit.Assertions para asserções fluentes
  • Crie classes de teste que correspondam às classes que estão sendo testadas (por exemplo, CalculatorTests para Calculator)
  • Use comandos de teste do SDK do .NET: dotnet test para executar testes
  • O TUnit requer .NET 8.0 ou superior

Estrutura de Teste

  • Nenhum atributo de classe de teste é necessário (como xUnit/NUnit)
  • Use o atributo [Test] para métodos de teste (não [Fact] como xUnit)
  • Siga o padrão Arrange-Act-Assert (AAA)
  • Nomeie testes usando o padrão MethodName_Scenario_ExpectedBehavior
  • Use ganchos de ciclo de vida: [Before(Test)] para configuração e [After(Test)] para desmontagem
  • Use [Before(Class)] e [After(Class)] para contexto compartilhado entre testes em uma classe
  • Use [Before(Assembly)] e [After(Assembly)] para contexto compartilhado entre classes de teste
  • O TUnit suporta ganchos de ciclo de vida avançados como [Before(TestSession)] e [After(TestSession)]

Testes Padrão

  • Mantenha os testes focados em um único comportamento
  • Evite testar múltiplos comportamentos em um único método de teste
  • Use a sintaxe de asserção fluente do TUnit com await Assert.That()
  • Inclua apenas as asserções necessárias para verificar o caso de teste
  • Torne os testes independentes e idempotentes (podem ser executados em qualquer ordem)
  • Evite interdependências de testes (use o atributo [DependsOn] se necessário)

Testes Orientados por Dados

  • Use o atributo [Arguments] para dados de teste inline (equivalente ao [InlineData] do xUnit)
  • Use [MethodData] para dados de teste baseados em métodos (equivalente ao [MemberData] do xUnit)
  • Use [ClassData] para dados de teste baseados em classes
  • Crie fontes de dados personalizadas implementando ITestDataSource
  • Use nomes de parâmetros significativos em testes orientados por dados
  • Múltiplos atributos [Arguments] podem ser aplicados ao mesmo método de teste

Asserções

  • Use await Assert.That(value).IsEqualTo(expected) para igualdade de valor
  • Use await Assert.That(value).IsSameReferenceAs(expected) para igualdade de referência
  • Use await Assert.That(value).IsTrue() ou await Assert.That(value).IsFalse() para condições booleanas
  • Use await Assert.That(collection).Contains(item) ou await Assert.That(collection).DoesNotContain(item) para coleções
  • Use await Assert.That(value).Matches(pattern) para correspondência de padrões regex
  • Use await Assert.That(action).Throws<TException>() ou await Assert.That(asyncAction).ThrowsAsync<TException>() para testar exceções
  • Encadeie asserções com o operador .And: await Assert.That(value).IsNotNull().And.IsEqualTo(expected)
  • Use o operador .Or para condições alternativas: await Assert.That(value).IsEqualTo(1).Or.IsEqualTo(2)
  • Use .Within(tolerance) para comparações de DateTime e numéricas com tolerância
  • Todas as asserções são assíncronas e devem ser aguardadas

Recursos Avançados

  • Use [Repeat(n)] para repetir testes várias vezes
  • Use [Retry(n)] para retentativas automáticas em caso de falha
  • Use [ParallelLimit<T>] para controlar os limites de execução paralela
  • Use [Skip("reason")] para pular testes condicionalmente
  • Use [DependsOn(nameof(OtherTest))] para criar dependências de testes
  • Use [Timeout(milliseconds)] para definir timeouts de teste
  • Crie atributos personalizados estendendo os atributos base do TUnit

Organização de Testes

  • Agrupe testes por recurso ou componente
  • Use [Category("CategoryName")] para categorização de testes
  • Use [DisplayName("Custom Test Name")] para nomes de testes personalizados
  • Considere usar TestContext para diagnósticos e informações de teste
  • Use atributos condicionais como [WindowsOnly] personalizado para testes específicos da plataforma

Desempenho e Execução Paralela

  • O TUnit executa testes em paralelo por padrão (ao contrário do xUnit, que requer configuração explícita)
  • Use [NotInParallel] para desabilitar a execução paralela para testes específicos
  • Use [ParallelLimit<T>] com classes de limite personalizadas para controlar a concorrência
  • Testes dentro da mesma classe são executados sequencialmente por padrão
  • Use [Repeat(n)] com [ParallelLimit<T>] para cenários de teste de carga

Migração do xUnit

  • Substitua [Fact] por [Test]
  • Substitua [Theory] por [Test] e use [Arguments] para dados
  • Substitua [InlineData] por [Arguments]
  • Substitua [MemberData] por [MethodData]
  • Substitua Assert.Equal por await Assert.That(actual).IsEqualTo(expected)
  • Substitua Assert.True por await Assert.That(condition).IsTrue()

…

Perguntas frequentes

O que são testes 'data-driven'?

São testes que rodam várias vezes com dados diferentes, sem que você precise escrever o mesmo teste várias vezes. É como ter um teste que se multiplica com informações variadas.

Como eu verifico se algo deu errado no teste?

Você usa comandos como 'Assert.That(valor).IsEqualTo(esperado)' para comparar o resultado real com o que você esperava. Se não forem iguais, o teste falha.

Posso rodar os testes em paralelo?

Sim, TUnit roda testes em paralelo por padrão para acelerar a execução, mas você pode controlar quais rodam juntos ou separadamente.

Detalhes

Descrição original do autor

Get best practices for TUnit unit testing, including data-driven tests

repo: github/awesome-copilot

Popularidade

Estrelas no GitHub
40 mil
Posição no ranking
#5098
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas