NUnit x MbUnit x MSTest x xUnit.net [fechado]

390

Existem muitas estruturas pouco testadas disponíveis para o .NET. Encontrei essa pequena comparação de recursos: http://xunit.github.io/docs/comparisons.html

Agora devo escolher o melhor para nós. Mas como? Isso importa? Qual é a prova mais futura e tem um momento decente por trás disso? Devo me preocupar com os recursos? Enquanto o xUnit parece ser o mais moderno e projetado especificamente para o .NET, o NUnit novamente parece ser o amplamente aceito. O MSTest novamente já está integrado ao Visual Studio ...

bitbonk
fonte
11
Essa tabela de comparação está desatualizada. Por exemplo, o NUnit também possui Assert.Throws etc, e tudo na tabela Assertions é a API antiga. A nova sintaxe fluente do Assert.That (..., Is ....) é muito mais agradável e já existe há um bom tempo.
Jim Cooper
11
Você conhece alguma tabela mais atualizada?
Bitbonk 18/05
11
No final de 2013, mudou-se do xUnit.net => NUnit. ! Também nota que xUnit.NET (o projeto) = xUnit (a categoria, dos quais NUnit é membro)
DeepSpace101
3
@Sid Por que você mudou do xUnity.net => NUnit?
Alexander Logger
2
Pergunta semelhante feita em 2014 Visual Studio 2013 MSTest vs NUnit
Michael Freidgeim

Respostas:

197

Sei que esse é um tópico antigo, mas pensei em postar um voto no xUnit.NET . Enquanto a maioria das outras estruturas de teste mencionadas é praticamente a mesma, o xUnit.NET adotou uma abordagem bastante única, moderna e flexível ao teste de unidade. Ele muda a terminologia, para que você não defina TestFixtures e Tests ... você especifica Facts and Theories sobre seu código, o que se integra melhor ao conceito do que é um teste na perspectiva de TDD / BDD.

O xUnit.NET também é EXTREMAMENTE extensível. Suas classes de atributo FactAttribute e TraitAttribute não são seladas e fornecem métodos básicos substituíveis que oferecem muito controle sobre como os métodos que esses atributos decoram devem ser executados. Embora o xUnit.NET em sua forma padrão permita escrever classes de teste semelhantes aos equipamentos de teste NUnit com seus métodos de teste, você não está confinado a essa forma de teste de unidade. Você é livre para estender a estrutura para oferecer suporte às especificações de preocupação / contexto / observação no estilo BDD, conforme mostrado aqui .

O xUnit.NET também suporta testes de estilo de ajuste diretamente prontos para uso com seu atributo Teoria e atributos de dados correspondentes. Os dados de entrada de ajuste podem ser carregados do Excel, banco de dados ou até mesmo uma fonte de dados personalizada, como um documento do Word (estendendo o atributo de dados base.) Isso permite que você capitalize em uma única plataforma de teste para testes de unidade e testes de integração, que pode ser enorme na redução das dependências do produto e do treinamento necessário.

Outras abordagens para teste também podem ser implementadas com o xUnit.NET ... as possibilidades são bastante ilimitadas. Combinados com outra estrutura de zombaria muito avançada, o Moq , os dois criam uma plataforma muito flexível, extensível e poderosa para implementar testes automatizados.

jrista
fonte
35
Embora isso tenha ocorrido há um ano, o NUnit adicionou a maioria dos atributos em questão. No NUnit, você pode escrever testes de qualquer maneira.
precisa
8
Não se trata tanto de quais atributos estão disponíveis, mas como eles podem ser usados. O xUnit.NET foi desenvolvido desde o início para ser uma estrutura altamente flexível e extensível que não o prendeu a nenhum método específico de teste e não exige que você atualize regularmente a estrutura principal para obter os recursos mais recentes.
jrista
9
1. Nomes bem diferentes nos atributos não farão muito sentido. 2. O NUnit era extensível e continua sendo extensível:? 3. Os parâmetros da linha de dados para testes são suportados na unidade. Tempo atrás, eles eram suportados em uma extensão :) 4. A unidade combinada com o Moq cria a mesma coisa. 5. Para o BDD, eu diria specflow, que se integra facilmente a muitas estruturas de teste de unidade.
graffic
8
I como o som de xUnit, no entanto, tem documentação zilch :(
Coronel Pânico
10
O xUnit não possui nenhuma documentação! por exemplo: Tente encontrar o que Traitrealmente faz ou se você pode agrupar testes diferentes no teste de mãe solteira (por exemplo, tudo testsdentro de a testfixture). O nUnit cria uma excelente visão hierárquica em vez da visão plana de testes do xUnit. Além disso, a nomenclatura não faz sentido - fatos e teoria? Seja realista! Esses são chamados melhor de testes e dados.
DeepSpace101
134

O NUnit é provavelmente o mais suportado pelas ferramentas de terceiros. Também existe há mais tempo que os outros três.

Pessoalmente, não me importo muito com estruturas de teste de unidade, as bibliotecas de zombaria são muito mais importantes (e prendem você a muito mais). Basta escolher um e ficar com ele.

Alexander Kojevnikov
fonte
3
qual é a sua melhor escolha de biblioteca simulada?
5119 dplante
31
Eu gosto de Moq, RhinoMocks também é bom.
Alexander Kojevnikov 08/06/09
5
Também pode valer a pena verificar Pex e Moles, a parte de moles é especialmente útil para zombar.
Charles Prakash Dasari,
4
MSpec com FakeItEasy ... fazendo casos de teste mais legível
Robie
5
MSpec com NSubstitute e AutoFixture é a minha escolha.
Daniel Hilgarth 19/03/12
108

Eu não iria com o MSTest. Embora seja provavelmente a prova mais futura das estruturas da Microsoft, não é a solução mais flexível. Não funcionará sozinho sem alguns hacks. Portanto, é difícil executá-lo em um servidor de compilação que não seja o TFS sem instalar o Visual Studio. O executor de teste do visual studio é realmente mais lento que o Testdriven.Net + qualquer uma das outras estruturas. E como os lançamentos dessa estrutura estão vinculados aos lançamentos do Visual Studio, há menos atualizações e, se você precisar trabalhar com um VS mais antigo, estará vinculado a um MSTest mais antigo.

Eu não acho que importa muito qual das outras estruturas você usa. É realmente fácil mudar de um para outro.

Eu pessoalmente uso o XUnit.Net ou NUnit, dependendo da preferência de meus colegas de trabalho. NUnit é o mais padrão. XUnit.Net é a estrutura mais enxuta.

Mendelt
fonte
36
Fui arrastado chutando e gritando para esta mesma conclusão. Eu realmente queria usar o MSTest por causa de sua integração com o Visual Studio, mas essa também é sua fraqueza. Preciso executar testes em um servidor de compilação que não seja da Microsoft e não há como instalar o Visual Studio nele apenas para obter isso. É uma pena que a Microsoft produza ótimas ferramentas e as torna quase inatingíveis.
Tim Long
11
+1 por chamar a horribilidade que é o MSTest. No final do dia, não importa qual framework de testes unitários você usa, contanto que como não é MSTest
Mike Mooney
21

Considere complementar, e não substituir, o MSTest por outra estrutura de teste. Você pode manter a integração do Visual Studio MSTest enquanto obtém os benefícios de uma estrutura de teste mais completa.

Por exemplo, eu uso o xUnit com o MSTest. Adicione uma referência ao assembly xUnit.dll e faça algo assim. Surpreendentemente, ele simplesmente funciona!

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Assert = Xunit.Assert;  // <-- Aliasing the Xunit namespace is key

namespace TestSample
{
    [TestClass]
    public class XunitTestIntegrationSample
    {
        [TestMethod]
        public void TrueTest()
        {
            Assert.True(true);  // <-- this is the Xunit.Assert class
        }

        [TestMethod]
        public void FalseTest()
        {
            Assert.False(true);
        }
    }
}
Matt Crouch
fonte
Essa técnica também pode funcionar para NUnit, MBUnit ou outras estruturas de teste mencionadas em outras respostas, mas ainda não as testei.
Matt Crouch
11
você acha que eu poderia fazer testes parametrizados para trabalhar com o MSTest com essa abordagem, Matt?
DevDave
@DevDave No. No exemplo dele, ele acabou de usar uma classe de outra montagem. Se você deseja testes parametrizados, precisará de outra estrutura de teste criada especificamente para estender o MSTest.
precisa saber é o seguinte
3
Suprisingly, it just works!Você acabou de chamar uma função estática de outra montagem. Por que você está surpreso que funcione? Além disso, se você apenas precisa de afirmações de que por que não usar uma montagem feita especificamente para isso?
precisa saber é o seguinte
9

A unidade não funciona bem com projetos de modo misto em C ++, então tive que descartá-la

Eric
fonte
3
Não estou orgulhoso desta resposta, mas deixei cair o teste de unidade para esse projeto. Eu tentei escrever muitos procedimentos de validação para detecção de erros em tempo de execução
Eric
2
Eu esperava usar o NUnit no modo misto, mas também o achei inadequado; no final, fui ao googletest, que é uma excelente estrutura de teste de unidade C ++ e simples de configurar.
Chillitom
8

Não é grande coisa em pequena escala / pessoal, mas pode se tornar um grande negócio rapidamente em uma escala maior. Meu empregador é uma grande loja da Microsoft, mas não pode / não pode comprar o Team System / TFS por vários motivos. Atualmente, usamos o Subversion + Orcas + MBUnit + TestDriven.NET e funciona bem, mas obter o TD.NET foi um grande aborrecimento. A sensibilidade da versão do MBUnit + TestDriven.NET também é um grande aborrecimento, e ter uma coisa comercial adicional (TD.NET) para revisão legal e compras para manipular e gerenciar, não é trivial. Minha empresa, como muitas empresas, é gorda e satisfeita com o modelo de assinatura do MSDN, e não está acostumada a lidar com compras únicas para centenas de desenvolvedores. Em outras palavras, a oferta de MS totalmente integrada, embora definitivamente nem sempre seja a melhor opção, é um valor agregado significativo na minha opinião.

Acho que continuaremos com nossa etapa atual, porque ela funciona e já superamos a questão organizacional, mas com certeza desejo que a MS tenha uma oferta atraente nesse espaço para que possamos consolidar e simplificar um pouco a nossa pilha de desenvolvimento.

user8133
fonte
2
ReSharper tem uma oferta atraente neste espaço!
Esquilo
7
Sua resposta é curiosa e parece contraditória. Você diz que é uma grande loja da Microsoft, mas não usa o TFS (que é o ponto principal - você não terá o benefício da integração vertical sem ele) e usa um modelo de assinatura MSDN, mas está usando um Abordagem -MS. Estou perdido, para ser sincero. Resposta bem desatualizada, infelizmente.
nicodemus13
6

Não é grande coisa, é muito fácil alternar entre eles. O MSTest sendo integrado também não é grande coisa, basta pegar o testdriven.net.

Como a pessoa anterior disse, escolha uma estrutura de zombaria, o meu favorito no momento é o Moq.


fonte