csharp-mstest
Faz seu agente aplicar as melhores práticas em testes unitários com MSTest. Ele ensina sobre APIs modernas de asserção e testes com dados.
O que ela faz
Este guia ensina como escrever testes de código eficientes usando a ferramenta MSTest. Ele mostra as melhores práticas para organizar seu código de teste, verificar resultados e lidar com erros.
Quando usar
- ✓Ao criar testes para verificar se seu código funciona corretamente.
- ✓Quando você precisa garantir que uma parte específica do seu programa se comporta como esperado.
- ✓Ao aprender a usar a ferramenta MSTest para testes de unidade.
Exemplo do que pedir para a IA
“Como posso testar se a função de soma retorna o valor correto para dois números positivos?”
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
Mensagem pronta para colar
Como funciona
O guia organiza o código de teste em classes e métodos, seguindo um padrão claro para escrever e verificar os resultados. Ele usa comandos específicos para comparar valores, verificar se algo é nulo ou se uma exceção foi lançada.
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-mstestOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/csharp-mstest/SKILL.md -o SKILL.mdConteú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 MSTest (MSTest 3.x/4.x)
Seu objetivo é me ajudar a escrever testes de unidade eficazes com MSTest moderno, usando APIs e melhores práticas atuais.
Configuração do Projeto
- Use um projeto de teste separado com a convenção de nomenclatura
[ProjectName].Tests - Referencie pacotes NuGet do MSTest 3.x+ (inclui analisadores)
- Considere usar MSTest.Sdk para configuração simplificada do projeto
- Execute testes com
dotnet test
Estrutura da Classe de Teste
- Use o atributo
[TestClass]para classes de teste - Sela classes de teste por padrão para desempenho e clareza de design
- Use
[TestMethod]para métodos de teste (prefira em relação a[DataTestMethod]) - Siga o padrão Arrange-Act-Assert (AAA)
- Nomeie testes usando o padrão
MethodName_Scenario_ExpectedBehavior
[TestClass]
public sealed class CalculatorTests
{
[TestMethod]
public void Add_TwoPositiveNumbers_ReturnsSum()
{
// Arrange
var calculator = new Calculator();
// Act
var result = calculator.Add(2, 3);
// Assert
Assert.AreEqual(5, result);
}
}
Ciclo de Vida do Teste
- Prefira construtores em relação a
[TestInitialize]- habilita camposreadonlye segue padrões C# padrão - Use
[TestCleanup]para limpeza que deve ser executada mesmo que o teste falhe - Combine construtor com
[TestInitialize]assíncrono quando for necessária configuração assíncrona
[TestClass]
public sealed class ServiceTests
{
private readonly MyService _service; // readonly enabled by constructor
public ServiceTests()
{
_service = new MyService();
}
[TestInitialize]
public async Task InitAsync()
{
// Use for async initialization only
await _service.WarmupAsync();
}
[TestCleanup]
public void Cleanup() => _service.Reset();
}
Ordem de Execução
- Inicialização da Assembly -
[AssemblyInitialize](uma vez por assembly de teste) - Inicialização da Classe -
[ClassInitialize](uma vez por classe de teste) - Inicialização do Teste (para cada método de teste):
- Construtor
- Defina a propriedade
TestContext [TestInitialize]
- Execução do Teste - o método de teste é executado
- Limpeza do Teste (para cada método de teste):
[TestCleanup]DisposeAsync(se implementado)Dispose(se implementado)
- Limpeza da Classe -
[ClassCleanup](uma vez por classe de teste) - Limpeza da Assembly -
[AssemblyCleanup](uma vez por assembly de teste)
APIs Modernas de Asserção
O MSTest fornece três classes de asserção: Assert, StringAssert e CollectionAssert.
Classe Assert - Asserções Principais
// Equality
Assert.AreEqual(expected, actual);
Assert.AreNotEqual(notExpected, actual);
Assert.AreSame(expectedObject, actualObject); // Reference equality
Assert.AreNotSame(notExpectedObject, actualObject);
// Null checks
Assert.IsNull(value);
Assert.IsNotNull(value);
// Boolean
Assert.IsTrue(condition);
Assert.IsFalse(condition);
// Fail/Inconclusive
Assert.Fail("Test failed due to...");
Assert.Inconclusive("Test cannot be completed because...");
Teste de Exceções (Prefira em relação a [ExpectedException])
// Assert.Throws - matches TException or derived types
var ex = Assert.Throws<ArgumentException>(() => Method(null));
Assert.AreEqual("Value cannot be null.", ex.Message);
// Assert.ThrowsExactly - matches exact type only
var ex = Assert.ThrowsExactly<InvalidOperationException>(() => Method());
// Async versions
var ex = await Assert.ThrowsAsync<HttpRequestException>(async () => await client.GetAsync(url));
var ex = await Assert.ThrowsExactlyAsync<InvalidOperationException>(async () => await Method());
Asserções de Coleção (Classe Assert)
Assert.Contains(expectedItem, collection);
Assert.DoesNotContain(unexpectedItem, collection);
Assert.ContainsSingle(collection); // exactly one element
Assert.HasCount(5, collection);
Assert.IsEmpty(collection);
Assert.IsNotEmpty(collection);
Asserções de String (Classe Assert)
Assert.Contains("expected", actualString);
Assert.StartsWith("prefix", actualString);
Assert.EndsWith("suffix", actualString);
Assert.DoesNotStartWith("prefix", actualString);
Assert.DoesNotEndWith("suffix", actualString);
Assert.MatchesRegex(@"\d{3}-\d{4}", phoneNumber);
Assert.DoesNotMatchRegex(@"\d+", textOnly);
Asserções de Comparação
Assert.IsGreaterThan(lowerBound, actual);
Assert.IsGreaterThanOrEqualTo(lowerBound, actual);
Assert.IsLessThan(upperBound, actual);
Assert.IsLessThanOrEqualTo(upperBound, actual);
…
Perguntas frequentes
O que é um teste de unidade?
É um pequeno pedaço de código que verifica se outra parte do seu código (geralmente uma função ou método) está funcionando como deveria.
Por que usar um projeto de teste separado?
Ajuda a manter seu código principal limpo e organizado, separando o código que executa o programa do código que verifica se ele funciona.
O que é o padrão Arrange-Act-Assert?
É uma forma comum de estruturar testes: 1. Arrange (Organizar): Preparar tudo o que você precisa. 2. Act (Agir): Executar o código que você quer testar. 3. Assert (Verificar): Checar se o resultado é o esperado.
Detalhes
Descrição original do autor
Get best practices for MSTest 3.x/4.x unit testing, including modern assertion APIs and data-driven tests
repo: github/awesome-copilot
Popularidade
- Estrelas no GitHub
- 40 mil
- Posição no ranking
- #5096
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
acquire-codebase-knowledge
Ajuda seu agente a entender e documentar um projeto de código existente. É útil para novas pessoas entrarem no projeto ou para ter uma visão geral da arquitetura.
github/awesome-copilot
acreadiness-assess
Faz seu agente avaliar a prontidão de um projeto para IA e gerar um relatório. É útil para entender o quão bem um projeto está preparado para usar ferramentas de IA.
github/awesome-copilot
acreadiness-generate-instructions
Ajuda seu agente a criar instruções para ferramentas de IA baseadas em uma avaliação. É útil para melhorar a forma como a IA interage com o código e fecha lacunas identificadas.
github/awesome-copilot
acreadiness-policy
Faz seu agente ajudar a definir ou aplicar políticas para avaliação de projetos de IA. É útil para padronizar a forma como os projetos são avaliados e garantir conformidade.
github/awesome-copilot
Skills parecidas
cpp-testing
Faz seu agente escrever e melhorar testes para código C++. Ajuda a configurar ferramentas de teste e a corrigir erros.
affaan-m/ECC
csharp-testing
Ajuda seu agente a criar testes para código C# e .NET. Ele usa as melhores práticas para garantir que os testes sejam eficientes e confiáveis.
affaan-m/ECC
django-tdd
Faz seu agente aplicar estratégias de teste para Django com pytest-django e TDD. É útil para escrever testes robustos e garantir a qualidade do código, especialmente para APIs DRF.
affaan-m/ECC