Yeehaw, compañeiro desenvolvedor! Hai un novo sheriff en Testing Town, e o seu nome é TUnit. Este recén chegado promete poñer orde no salvaxe oeste das probas unitarias en .NET 8. Estás listo para un duelo de frameworks? Desenfunda o teu teclado e prepárate!
TLDR (Resumo)
- TUnit é un novo framework de probas unitarias para .NET 8.
- Baséase en NUnit e XUnit.
- Ofrece unha sintaxe fluída e expresiva para as asercións.
- Executa probas en paralelo por defecto.
- É máis rápido que NUnit e XUnit.
- Proporciona mensaxes de erro claras e doadas de entender.
- Permite probas orientadas a datos co atributo Arguments.
- Está dispoñible como paquete NuGet e é compatible con Visual Studio, Rider e VS Code.
- Visita TUnit para saber máis.
Quen é este forasteiro chamado TUnit?
TUnit non é un forasteiro en Testing Town. Baséase no mellor de NUnit e XUnit pero renuncia aos problemas que poden dar as compatibilidades con versións antigas de .NET. Só está dispoñible a partir da versión 8 xa que está creado sobre a nova plataforma de testing de Microsoft (Microsoft.Testing.Platform) e iso fai que as túas probas se executen máis rápido que o mellor corcel que xamais vises.
Probas unitarias, de integración, de aceptación... nada fai tremer ao noso sheriff.
Podes atopalo tanto para as últimas versións de Visual Studio como en Rider ou VS Code como paquete NuGet: Tunit nuget
TUnit en acción: Limpando as rúas de Testing Town
Pero basta de palabrería. Chegou a hora de ver como é e de que é capaz TUnit.
Esta é unha proba unitaria sinxela onde o noso sheriff capturará a Billy o Neno e obterá 10.000$ de recompensa por iso.
using TUnit.Assertions;
using TUnit.Assertions.Extensions;
using TUnit.Core;
public class SheriffTests
{
[Test]
public async Task CapturarBandido_BandidoCoñecido_DeberíaAumentarRecompensa()
{
// Arrange
var sheriff = new Sheriff("Wyatt Earp");
var bandido = new Bandido("Billy the Kid", recompensa: 10000);
// Act
var result = sheriff.CapturarBandido(bandido);
// Assert
await Assert.That(result.Recompensa).IsEqualTo(10000);
}
}
- Se te fixas, TUnit segue usando o patrón AAA (Arrange, Act e Assert) que usamos no resto de frameworks de testing.
- Os Assert usan unha sintaxe fluída para que sexa moito máis claro e lexible que están validando.
- E aínda que aquí só temos unha proba, as probas lánzanse por defecto sempre en paralelo. Se algunha das túas probas non debe ser lanzada de forma paralela necesitas engadir o atributo
[NotInParallel]
nela.[Test, NotInParallel] public async Task CapturarBandido_BandidoCoñecido_DeberíaAumentarRecompensa()
As armas do novo sheriff: Assertions de TUnit
Todo bo sheriff necesita un arsenal, e TUnit non se queda curto. No exemplo anterior xa coñeciches a That
e a IsEqualTo
pero aquí temos a uns cantos máis.
That().IsNullOrEmpty()
That().IsNullOrWhitespace()
That().IsNotNull()
That().IsPositive()
That().ThrowsException()
Hai moitos máis e incluso se non atopas o que necesitas podes crear os teus propios Assert herdando da clase
AssertCondition<TActual, TExpected>
onde TActual é o obxecto a ser validado e TExpected o valor esperado.
Sobreescribe o método Passes
coa validación que necesitas realizar
private protected override bool Passes(TActual? actualValue, Exception? exception)
E o método GetFailureMessage
para mostrar a mensaxe de erro que necesitas
protected internal override string GetFailureMessage()
Outro punto interesante é que podes crear validacións máis complexas ou completas coas propiedades And
e Or
[Test]
public async Task MyTest()
{
var result = 1 + 2;
await Assert.That(result)
.IsNotNull()
.And.IsPositive()
.And.IsEqualTo(3);
}
Que me aspen se isto non merece un bo trago de zarzaparrilla!
O gran duelo: TUnit vs NUnit vs xUnit
TUnit | NUnit | xUnit | |
---|---|---|---|
Sintaxe | Fluída e expresiva | Tradicional | Moderna pero menos expresiva |
Velocidade | 🚀🚀🚀 | 🚀🚀 | 🚀🚀 |
Curva de aprendizaxe | Suave como un whisky añello | Familiar como un vello revólver | Algo complicada ao principio |
Integración .NET 8 | Perfecta como un traxe a medida | Boa | Boa |
Mensaxes de erro | Claras como a auga do río | Ás veces crípticas | Mellores que NUnit |
Comunidade | Pequena pero crecendo | Grande e establecida | Grande e activa |
Plugins | Poucos pero potentes | Abundantes | Moderados |
Por que TUnit é o novo sheriff que necesitamos?
-
Sintaxe que namora: Escribir tests con TUnit é tan satisfactorio como gañar un duelo ao mediodía. Simple, sinxelo e usando sintaxe fluída.
[Test] public void Banco_RetirarDiñeiro_DeberíaReducirSaldo() { var conta = new ContaBancaria(saldoInicial: 100); conta.RetirarDiñeiro(50); conta.Saldo.That().IsEqual(50); }
-
Velocidade de vaqueiro: Os teus tests correrán máis rápido que un ladrón de bancos perseguido pola lei.
Method | Mean | Error | StdDev |
---|---|---|---|
TUnit_AOT | 239.1 ms | 17.49 ms | 51.58 ms |
TUnit | 598.0 ms | 22.00 ms | 64.88 ms |
NUnit | 14,188.5 ms | 282.69 ms | 495.11 ms |
xUnit | 14,397.4 ms | 285.65 ms | 684.40 ms |
MSTest | 14,396.9 ms | 285.20 ms | 370.85 ms |
-
Mensaxes de erro que falan a túa lingua: Nada de xeroglíficos. TUnit diche que pasou coa claridade dun predicador de domingo.
-
Probas orientadas a datos: Repite as túas probas tantas veces como queiras cun set de datos distintos sen volverte tolo usando o atributo
Arguments
.[Test] [Arguments(1, 1, 2)] [Arguments(1, 2, 3)] [Arguments(2, 2, 4)] [Arguments(4, 3, 7)] [Arguments(5, 5, 10)] public async Task MyTest(int value1, int value2, int expectedResult) { var result = value1 + value2; await Assert.That(result).IsEqualTo(expectedResult); }
Conclusión: Estás listo para unirte á nova lei en Testing Town?
TUnit non é só outro framework de testing, é unha revolución no salvaxe oeste do desenvolvemento. É rápido, intuitivo e máis divertido que un rodeo en sábado pola noite.
NUnit e xUnit son como eses vellos alguacís que mantiveron a paz durante anos. Respectables, confiables, pero quizais un pouco cansados. TUnit é o novo sheriff na cidade, traendo ideas frescas e unha actitude que fai que probar o teu código sexa máis emocionante que un tiroteo ao atardecer. É certo que é novo na cidade e necesitará un tempo para ver se se asenta e gáñase o respecto que merece.
Así que, que dis, vaqueiro? Estás listo para colgar a túa vella placa de NUnit ou xUnit e unirte á nova lei en Testing Town? TUnit está agardando por ti, e xuntos, farán que os bugs treman de medo ao oír os seus pasos.
E ti? Atréveste a desenfundar TUnit no teu próximo proxecto? Ou seguirás aferrado ao teu vello confiable como un vaqueiro ao seu cabalo favorito?
Lembra: en Testing Town, a única lei é a calidade do código. E con TUnit como o teu axudante, esa lei cumprirase... a rajatabla!
Se queres saber máis sobre el revisa a súa páxina: TUnit ou se te ves con ánimo de ser axudante do sheriff proba a facer as túas achegas ao repositorio de Git do proxecto Repositorio