NUnit vs. xUnit

110

Quais são as diferenças entre NUnit e xUnit.net ? Qual é o objetivo de desenvolver dois deles, não apenas um?

Eu li que o xUnit está sendo desenvolvido pelo inventor do NUnit:

xUnit.net é uma ferramenta de teste de unidade para o .NET Framework. Escrito pelo inventor original do NUnit

Por outro lado:

NUnit é uma estrutura de teste de unidade para todas as linguagens .Net .. a versão de produção atual, versão 2.6, é a sétima versão principal desta ferramenta de teste de unidade baseada em xUnit

Onde está a verdade?

Ruslan
fonte
3
Como @Joey apontou - esta não é uma cópia direta da pergunta vinculada. Nesse caso, o OP, fundamentalmente, não entendeu algo; a saber, a diferença entre xUnit.net - a ferramenta de teste de unidade e x Unidade - o termo generalizado para a classe de frameworks de teste de unidade (nUnit, jUnit, etc.). Votando para reabrir.
Rob Levine

Respostas:

131

No momento em que escrevo esta resposta, a versão mais recente do NUnit é v3.5 e xUnit.net é v2.1.

Ambos os frameworks são fantásticos e ambos suportam a execução de testes paralelos (embora de uma forma diferente). O NUnit existe desde 2002, é amplamente usado, bem documentado e tem uma grande comunidade, enquanto o xUnit.net é mais moderno, mais aderente ao TDD, mais extensível e também tendência no desenvolvimento do .NET Core. Também está bem documentado.

Além disso, a principal diferença que percebi é a maneira como o xUnit.net executa os métodos de teste. Portanto, em NUnit , temos uma classe de teste e um conjunto de métodos de teste nela. NUnit cria uma nova instância da classe de teste e então executa todos os métodos de teste da mesma instância. Considerando que xUnit.net cria uma nova instância da classe de teste para cada um dos métodos de teste. . Portanto, não se pode usar campos ou propriedades para compartilhar dados entre métodos de teste, o que é uma prática ruim, pois nossos métodos de teste seriam dependentes uns dos outros, o que não é aceitável em TDD. Portanto, se você usar o xunit.net, poderá ter certeza de que seus métodos de teste estão completamente isolados.

Se você estiver disposto a compartilhar alguns dados entre seus métodos de teste, o xUnit permitirá que você faça isso. Portanto, por padrão, todos os métodos de teste são completamente isolados, mas você pode interromper esse isolamento em casos específicos intencionalmente. Eu gosto dessa atitude, é por isso que gosto mais dela.

Akazemis
fonte
4
Para mais detalhes, verifique meu último post: codopia.wordpress.com/2017/02/20/…
akazemis
2
O que você escreve sobre execução paralela não é verdade. Talvez tenha sido na época da sua postagem, mas agora não é. Verifique este xunit.net/docs/running-tests-in-parallel . Diz que os métodos de teste em uma classe nunca serão executados paralelamente.
Gondil
Obrigado @Gondil, você está certo, ele não executará métodos de uma única classe em paralelo. ajustou o bit de paralelismo
akazemis
1
Não tenho certeza de como você descobriu que o xUnit é "bem documentado", pois claramente não é. Todas as informações devem ser encontradas através de fontes da comunidade e questões stackoverflow, em vez de uma boa documentação como o NUnit faz. Fiquei realmente empolgado com o xUnit após sua resposta, mas percebi que o NUnit também parece estar se saindo bem no .NET Core.
CularBytes
1
@Loaderon Eu postei isso há cerca de 4 anos e tenho usado o xunit desde então até agora. a documentação e a comunidade estão muito melhores do que antes e agora estão mais maduras. portanto, use o XUnit com tranquilidade, você não precisará recorrer ao NUnit. :)
akazemis
33

Você está confundindo o nome de uma única ferramenta ( xUnit.net ) com o nome de uma classe inteira de estruturas de teste de unidade ( xUnit , ax referindo-se a uma linguagem / ambiente, por exemplo, JUnit, NUnit, ...).

Joey
fonte
1
Pena que tenha fechado, já que não é uma duplicata direta - você tem razão - o OP se confundiu entre dois termos que são quase iguais.
Rob Levine,
Mudei um pouco o título, para ter certeza de que não haverá confusão.
Ruslan
1
Não fui pelo título, mas sim pelos segmentos destacados das citações em sua pergunta. Mas talvez eu não tenha entendido você.
Joey de
8

xUnit Pros:

O xUnit segue um novo conceito, evitando os antigos métodos "SetUp" e "TearDown". Isso nos força a usar IDisposable e um construtor como deveríamos fazer como desenvolvedores .NET. Além disso, o xUnit tem um conceito claro de compartilhamento de contexto.

xUnit Cons:

A disponibilidade para obter o contexto de teste ainda não foi implementada.

TakinosaJi
fonte
1
O que é "contexto de teste" ? Já foi implementado?
Peter Mortensen
8

Um benefício do xUnit é que ele encontra testes em classes diferentes; ele os executa em paralelo . Isso pode economizar muito tempo se você tiver muitos casos de teste.

Você pode, é claro, desligar isso ou controlar sua operação (número de threads, threads por classe, testes por montagem, etc.

Confira esta solução de amostra com dois projetos de teste, um usando xUnit e o outro NUnit .

Você pode ler mais sobre testes paralelos no xUnit aqui .

Rad
fonte
O xunit tem alguma outra maneira de fazer testes na mesma classe para rodar em paralelo?
Magesh de