Testes de Unidade - Comparando NUnit , XUnit e Visual Studio
Hoje vamos comparar dois frameworks para realizar testes de unidade muito populares na plataforma .NET: NUnit e XUnit. |
Os testes de unidade podem ser executados com a frequência que você quiser, em quantos tipos diferentes de dados você quiser e quase sem envolvimento humano depois que os testes forem escritos.
Além disso usar o código para testar o código muitas vezes resulta em você perceber falhas em seu programa que seriam muito difíceis de detectar do ponto de vista de um programador.
O teste de unidade é um tipo de teste feito no lado do desenvolvedor. É usado para testar métodos, propriedades, classes e montagens. O teste de unidade não é um teste feito pelo departamento de Garantia de Qualidade(QA). Para saber onde o teste de unidade se encaixa no desenvolvimento, observe a seguinte imagem:
Assim o teste de unidade é usado para testar um pequeno pedaço de código viável (operacional) chamado unidade. Isso incentiva os desenvolvedores a modificar o código sem preocupações imediatas sobre como essas mudanças podem afetar o funcionamento de outras unidades ou do programa como um todo. O teste de unidade pode ser demorado e tedioso, mas deve ser feito completamente com paciência.
Os frameworks de testes de unidades mais populares na plataforma .NET são : MSTest, NUnit e XUnit.
Além disso o VS 2019 Community também oferece templates de projetos para os 3 frameworks acima:
Além destes
frameworks temos também as ferramentas de teste integradas ao próprio Visual
Studio que podemos usar.
Todas estes frameworks oferecem um objetivo final semelhante, que é
ajudar a tornar a escrita de testes de unidade mais rápida, simples e fácil! Mas
ainda existem algumas diferenças importantes entre eles. Alguns são mais focados
em testes complexos e poderosos, enquanto outros classificam a simplicidade e a
usabilidade como uma prioridade mais alta.
A ferramenta de testes do Visual Studio (MSTest)
Na maioria das versões desde 2005, o Visual Studio vem com um framework de teste integrado com suporte da Microsoft que é oa mais simples dos três frameworks se usa uma estrutura de atributo de método fácil de entender onde você pode adicionar tags como '[TestClass]' e '[TestMethod]' ao seu código em ordem para fazer o teste.
O Visual Studio ainda possui um painel de IU dedicado à visualização de seus testes, que pode ser encontrado no menu Test -> Test Explorer.
Painel do Test Explorer:
O MS Test é extensível e funciona com .NET CLI e Visual Studio.
Exemplo:
[TestClass] public class MyClass { [TestInitialize()] public void Initialize() {} [TestCleanup()] public void Cleanup() {} [TestMethod] public void MyTest() { } } |
A ferramenta de testes NUnit
O NUnit talvez seja o framwork para testes de unidade mais usado sendo de código aberto, e, também uma solução de teste ampla e poderosa.
O NUnit é um
framework de teste de unidade para todas as linguagens .NET. Inicialmente
portado do JUnit, a versão de produção atual foi reescrita com muitos novos
recursos e suporte para uma ampla gama de plataformas .NET. É um projeto da .NET
Foundation.
O NUnit é instalado por meio de um pacote NuGet, que você pode pesquisar no
Visual Studio. Os pacotes usados podem ser NUnit e NUnit.ConsoleRunner,
embora você também tenha a opção de instalar um plug-in baseado em GUI para o
Visual Studio.
O NUnit usa um sistema de estilo de atributo muito semelhante, assim como as
ferramentas de teste do Visual Studio, mas agora iremos nos referir a
[TestClass] como [TestFixture]
e a [TestMethod] simplesmente como
[Test].
Exemplo:
[TestCase(1)] [TestCase(2)] public void MeuTest(int testaValor) { } |
A ferramenta de testes xUnit
O xUnit é um framework de teste de unidade de código aberto com um foco maior em extensibilidade e flexibilidade; ele segue uma estrutura de desenvolvimento voltada para a comunidade e se concentra em ser fácil de expandir.
O xUnit é a tecnologia mais recente para aplicativos .NET de teste de unidade e funciona com ReSharper, CodeRush, TestDriven.NET e Xamarin. É um projeto da .NET Foundation e opera segundo seu código de conduta.
Na verdade, o xUnit se refere a um agrupamento de frameworks, mas nos
concentraremos na versão C#. Outras versões incluem JUnit. O
xUnit também usa um estilo de teste
mais moderno e único, eliminando a terminologia padrão [test]
[testfixture] e usando novas tags sofisticadas como
Fact e Theories.
O NUnit e o xUnit são bastante semelhantes em muitos aspectos, já que o NUnit
serve como base para muitos dos novos recursos que o XUnit apresenta.
Observe que o xUnit também é instalado por meio de um pacote NuGet muito
parecido com o NUnit, que você pode pesquisar no Visual Studio. Os pacotes
usados podem ser XUnit e XUnit.ConsoleRunner, embora você também tenha a opção
de instalar um plug-in baseado em GUI para Visual Studio.
Muito parecida com a tag [TestCase] em NUnit,
o xUnit tem sua própria solução para fornecer parâmetros para um caso de teste.
Para fazer isso, usamos a nova tag [InLineData] e
as theories.
Em geral, um caso de teste que não tem parâmetros (portanto, não depende de
nenhuma alteração de dados) é referido como um Fact em XUnit, o que significa
que ele sempre executará o mesmo. Por outro lado, temos Theories, que se referem a
um caso de teste que pode obter dados diretamente de tags [InLineData]
ou mesmo de uma planilha Excel.
Exemplo:
public class Tests { [Fact] public void MeuFact() { Assert.True(true); } [Theory] [InlineData(false)] [InlineData(true)] public void MeuTheory(bool testData) { Assert.True(boolean); } } |
Conclusão
Independentemente de qual dos frameworks de teste de unidade você usa, você receberá todos os fundamentos. Existem algumas diferenças entre eles que são detalhes.
Todos os três frameworks provavelmente farão 99% das coisas que você precisa testar no dia-a-dia. 3 ou 4 anos atrás, a falta de certos recursos no Ms Test tornou o NUnit uma consideração melhor. Hoje, essa lacuna diminuiu, então a escolha entre NUnit e MsTest ficou mais difícil.
Assim, quer seja pela
conveniência do framework de teste de unidade integrado da Microsoft, o status
sólido e comprovado do NUnit ou a abordagem moderna dos testes de unidade que o
XUnit oferece, sempre vai existir algum detalhes que vai fazer você optar por um
deles.
Se eu tivesse que
escolher, escolheria o xUnit, por ser a mais recente (embora a documentação
não seja lá estas coisas), e se isso não fosse possível por qualquer motivo,
então eu escolheria o NUnit.
"Mas, se o nosso
evangelho ainda está encoberto, é para os que se perdem que está encoberto, nos
quais o deus deste século cegou o entendimento dos incrédulos, para que lhes não
resplandeça a luz do evangelho da glória de Cristo, o qual é a imagem de Deus."
2 Coríntios 4:3,4
Referências: