Testes em C# (.NET): frameworks e ferramentas
Testes são uma parte essencial do desenvolvimento profissional na plataforma .NET. Uma cobertura de código de qualidade com testes reduz o número de bugs, simplifica a refatoração e aumenta a confiança no produto. No ecossistema C#, existem muitos frameworks e utilitários maduros, cada um resolvendo tarefas específicas: desde testes unitários até verificações de integração e testes de UI. Neste artigo, vamos analisar as principais ferramentas, suas capacidades e exemplos de uso.
Principais frameworks para testes unitários
Testes unitários são a base da pirâmide de testes. No .NET Core / .NET 5+, o padrão de facto tornou-se o xUnit.net, embora NUnit e MSTest também sejam ativamente utilizados.
xUnit.net
Framework moderno, flexível e mais popular. Funciona com base no princípio de "facts" e "theories".
- Facts — testes simples sem parâmetros.
- Theories — testes parametrizados com dados dos atributos
[InlineData]ou[MemberData]. - Não requer o atributo
[TestClass]— qualquer classe pública pode conter testes.
using Xunit;
public class CalculatorTests{ [Fact] public void Add_ShouldReturnSum() { // Arrange var calc = new Calculator(); // Act var result = calc.Add(2, 3); // Assert Assert.Equal(5, result); }
[Theory] [InlineData(1, 2, 3)] [InlineData(-1, -1, -2)] public void Add_WithMultipleInputs_ShouldReturnCorrectSum(int a, int b, int expected) { var calc = new Calculator(); var result = calc.Add(a, b); Assert.Equal(expected, result); }}NUnit
Framework clássico com uma rica história. Diferencia-se por atributos poderosos e suporte a parametrização.
- Utiliza os atributos
[Test],[TestCase],[SetUp]. - Suporta execução paralela de testes.
- Conveniente para cenários complexos com dados de teste.
using NUnit.Framework;
[TestFixture]public class CalculatorNUnitTests{ [Test] public void Subtract_ShouldReturnDifference() { var calc = new Calculator(); var result = calc.Subtract(10, 4); Assert.That(result, Is.EqualTo(6)); }
[TestCase(5, 3, 2)] [TestCase(0, 0, 0)] public void Subtract_WithParameters_ShouldReturnCorrect(int a, int b, int expected) { var calc = new Calculator(); Assert.That(calc.Subtract(a, b), Is.EqualTo(expected)); }}MSTest
Framework integrado da Microsoft. Ideal para projetos simples e equipes que trabalham no ecossistema Visual Studio.
- Atributos:
[TestMethod],[TestClass],[DataRow]. - Integração estreita com Azure DevOps e pipelines CI/CD.
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]public class CalculatorMSTests{ [TestMethod] public void Multiply_ShouldReturnProduct() { var calc = new Calculator(); var result = calc.Multiply(4, 5); Assert.AreEqual(20, result); }
[DataRow(2, 3, 6)] [DataRow(0, 100, 0)] [DataTestMethod] public void Multiply_WithDataRows_ShouldReturnCorrect(int a, int b, int expected) { var calc = new Calculator(); Assert.AreEqual(expected, calc.Multiply(a, b)); }}Bibliotecas para objetos mock e isolamento
Ao testar unidades, muitas vezes é necessário isolar o código testado de dependências externas (BD, API, sistema de arquivos). Para isso, são utilizados frameworks de mock.
Moq
O framework mais popular
Também na biblioteca
Guia completo do Drogon para C++: exemplos práticos
Processamento de Markdown em Swift para iOS e macOS: bibliotecas e exemplos
MPAndroidChart para Kotlin: guia completo com exemplos práticos
Cliente HTTP para JavaScript (Node.js): top bibliotecas 2025