Comparação de ferramentas de teste de instantâneo para .NET


Entre as melhores ferramentas de teste de instantâneos para desenvolvedores .NET, existem muitas ótimas opções. Mas existem duas ferramentas que realmente se destacam: verifique e tempestade Petrel. Ambos oferecem abordagens exclusivas para gerenciar linhas de base esperadas nos testes de unidade e integração, mas diferem significativamente na metodologia e implementação.

Verificar Concentra-se no gerenciamento de instantâneos baseado em arquivos, no armazenamento de linhas de base serializadas e alavancando extensões e ferramentas de diff especializadas.

Storm Petrelpor outro lado, apresenta uma abordagem baseada em código C#, usando geradores incrementais .NET para atualizar linhas de base diretamente no código de teste. Compreender suas diferenças pode ajudar os desenvolvedores a escolher a ferramenta certa com base nas necessidades do projeto.

O que é verificar .NET?

Verifique .NET é uma coleção de Pacotes Nuget Assim,Ferramentas de gerenciamento de instantâneose extensões Projetado para simplificar o teste de instantâneo no .NET.

Comparação de ferramentas de teste de instantâneo para .NET

Ele fornece extensões para serialização, comparação e verificação das linhas de base esperadas para as bibliotecas e estruturas .NET mais populares. Verificar ajuda a organizar testes de instantâneos comparando e reescrevendo instantâneos de linha de base armazenados no sistema de arquivos.

O que é Storm Petrel .Web?

Storm Petrel .NET é uma ferramenta de gerador incremental que atualiza linhas de base esperadas diretamente no código de teste C# (em vez de instantâneos de arquivo). Ele suporta testes de unidade e integração para as estruturas de teste .NET mais populares.

Instantâneos de arquivo são um caso de uso específico de gerenciamento de linha de base em Storm Petrel, que pode ser implementado por meio do FilesnapshotInfrastructure Pacote Nuget. Este pacote implementa parcialmente a tempestade de petrel abstração camada.

Comparação técnica: Verifique vs. Storm Petrel

Aqui, compararemos a verificação e o Storm Petrel para ajudá -lo a ver as diferenças mais importantes na maneira como lidam com instantâneos, atualizações de testes e estruturas suportadas.

Requisitos de refatoração de teste

Os desenvolvedores precisam refatorar os testes de afirmação tradicionais em testes de instantâneos usando o Confirm. Abaixo estão exemplos de como fazer a transição dos testes tradicionais para os testes de verificação do estilo.

Exemplo de teste de afirmação tradicional

(Reality)

public void TraditionalTest()
{
    var particular person = ClassBeingTested.FindPerson();
    Assert.Equal(new("ebced679-45d3-4653-8791-3d969c4a986c"), particular person.Id);
    Assert.Equal(Title.Mr, particular person.Title);
    Assert.Equal("John", particular person.GivenNames);
    Assert.Equal("Smith", particular person.FamilyName);
    Assert.Equal("Jill", particular person.Partner);
    Assert.Equal(2, particular person.Youngsters.Depend);
    Assert.Equal("Sam", particular person.Youngsters(0));
    Assert.Equal("Mary", particular person.Youngsters(1));
    Assert.Equal("4 Puddle Lane", particular person.Handle.Road);
    Assert.Equal("USA", particular person.Handle.Nation);
}

Teste tradicional usando FluentsSertions

(Reality)

public void TraditionalTestViaAssertionLibrary()
{
    var particular person = ClassBeingTested.FindPerson();
    particular person.Ought to().BeEquivalentTo(new Particular person
    {
        Id = new("ebced679-45d3-4653-8791-3d969c4a986c"),
        Title = Title.Mr,
        GivenNames = "John",
        FamilyName = "Smith",
        Partner = "Jill",
        Youngsters = new Record
        {
            "Sam",
            "Mary"
        },
        Handle = new Handle
        {
            Nation = "USA",
            Road = "4 Puddle Lane",
        }
    });
}

Teste de instantâneo usando verificar

(Reality)

public Activity SnapshotTest()
{
    var particular person = ClassBeingTested.FindPerson();
    return Confirm(particular person);
}

Na verificação, a linha de base da pessoa é serializada e armazenada em um arquivo a seguir Verificação inicial e Verificação subsequente flui.

Tempestade

Verificação inicial

Verificação

Verificação subsequente

A Storm Petrel não exige que os desenvolvedores alterem os testes tradicionais. Conforme explicado no “Teste de instantâneo com scand.stormpeTrel.Generator sem serializaçãoSeção, os testes tradicionais mantêm seus benefícios significativos em relação aos testes de instantâneo.

Para testes de instantâneos de arquivos, o Storm Petrel também segue a abordagem tradicional com um requisito pure:

Os desenvolvedores devem chamar métodos como

`Scand.StormPetrel.FileSnapshotInfrastructure.SnapshotProvider.ReadAllText()`

ou

`SnapshotProvider.ReadAllBytes()`

com base no casos de uso.

Armazenamento e gerenciamento de instantâneos

Verifique suporta ferramentas como Resharper e Cavaleiro Check Runner Verifique os plugins. Storm Petrel .Web, no entanto, não requer essas ferramentas.

Em vez disso, ele aproveita a infraestrutura .NET/IDE para executar testes autogenerados e atualizar linhas de base. Depois de atualizar as linhas de base, os desenvolvedores podem compará-los usando qualquer ferramenta de terceiros para verificar se as atualizações estão corretas.

Verificar oferece numerosas extensões (por exemplo, Verifique.aspnetcoreAssim, Verifique.winformsAssim, Verifique.xaml) para verificar objetos de bibliotecas específicas. Storm Petrel elimina a necessidade de tais extensões, representando linhas de base como C# por meio de terceiros dumpers ou usando qualquer serialização/representação de objetos para instantâneos de arquivo.

Estruturas de teste suportadas

Verifique suportes cerca de seis estruturas de testeincluindo Xunit, Nunit e Mstest. Storm Petrel atualmente suportes Somente essas três estruturas mais populares.

Mecanismos diff & atualizações

Verificar inclui um DIFF MOTOR com suporte para várias ferramentas. A Storm Petrel, por outro lado, atualiza as linhas de base diretamente, permitindo que os desenvolvedores usem qualquer ferramenta Diff/Merge de sua escolha para comparação.

Prós e contras de ambas as abordagens

Abaixo estão os prós e contras mais notáveis ​​de cada abordagem (embora não seja uma lista exaustiva).

Estruturas de teste suportadas

Profissionais de verificar

Contras da verificação

  • Sem suporte para linhas de base C# Código: A verificação não suporta linhas de base esperadas armazenadas diretamente no código C#, que é um caso de uso primário nos testes tradicionais.
  • Refatoração de teste necessária: São necessárias mudanças significativas nos testes tradicionais para adotar a abordagem de teste de instantâneo da Confirm.
  • Complexidade: O grande número de opções de interatividade e extensões especializadas pode exigir um esforço adicional para aprender e configurar. Algumas representações de objetos podem não ser suficientes prontos para uso.

Prós de Storm Petrel

  • Abordagem de teste tradicional: Mantém a abordagem de teste tradicional sem exigir mudanças significativas. Veja o configuração Para convenções específicas de nomeação padrão/personalizada de variáveis ​​reais/esperadas e Perguntas frequentes Para outros detalhes.
  • Flexibilidade: Suporta “linhas de base esperadas no código C#” e “linhas de base esperadas em arquivos instantâneos”.
  • Simplicidade: Não há necessidade de extensões especializadas ou ferramentas de interatividade incorporadas. Quaisquer soluções de terceiros podem ser usadas aqui.

Contras da tempestade petrel

  • Nenhuma interatividade incorporada: Os desenvolvedores devem usar as ferramentas diff diferenciadas de terceiros para comparar linhas de base reais e esperadas após a Storm Petrel .NET as atualiza.
  • Suporte de estrutura limitada: Atualmente, suporta apenas Xunit, Nunit e Mstest. Não há suporte para estruturas menos populares ou F#.

Casos de uso

Nesta seção, exploraremos como verificar e tempestade Petrel são usados ​​em cenários do mundo actual. Cada ferramenta atende às necessidades específicas; portanto, vamos quebrar quando e por que você pode escolher um sobre o outro.

Verificação com verificar

Verificação inicial e subsequente com verificar

Verificar é apenas para projetos em que você deseja gerenciar testes de instantâneos através de arquivos externos. Você usa verificar para verificar e reescrever linhas de base esperadas para testes de instantâneos no estilo de verificar. Isso é útil quando você precisa armazenar instantâneos fora do seu código de teste e compará -los facilmente à medida que seus testes evoluem.

Exemplo:
Você executa um teste e o instantâneo da linha de base não corresponde à saída atual. Verifique se reescreve o instantâneo para refletir o novo estado, facilitando o rastreamento de alterações ao longo do tempo.

Visible Assist:
Inicial e Verificação subsequente com verificar.

Reescrevendo linhas de base com Storm Petrel

A Storm Petrel se concentra nas linhas de base C# para testes de instantâneos. Ele também suporta testes de instantâneos através de arquivos externos, tornando -o uma boa opção para os desenvolvedores. Oferece dois casos de uso primário para a reescrita da linha de base:

  • Testes tradicionais: Com o Storm Petrel, você pode automatizar o processo de atualização de linhas de base que são armazenadas diretamente como código C# dentro dos seus métodos de teste. Isso funciona bem quando você não deseja confiar em arquivos de instantâneos externos, mantendo tudo no seu código de teste.
    Exemplo:
    O Storm Petrel ajusta a linha de base no código C# sempre que os resultados do teste mudam, mantendo -o consistente com o estado mais recente.
    Visible Assist:

Storm Petrel

  • Testes de instantâneos de arquivo: A Storm Petrel também suporta automatizar a atualização de linhas de base para testes de instantâneos baseados em arquivos. Você pode usar o pacote Nuget FilesnaPShotInfrastructure para gerenciar instantâneos de arquivos, permitindo automatizar atualizações de linha de base para testes tradicionais de instantâneos.
    Exemplo:
    Quando um teste muda, o Storm Petrel pode atualizar automaticamente o arquivo de instantâneo correspondente com base no seu caso de uso definido.
    Visible Assist:

Scand Storm Petrel

Veredicto: Qual ferramenta você deve usar?

Em geral, sua escolha depende das circunstâncias do seu projeto:

  • Se você precisar trabalhar com linhas de base armazenadas no código C#, Storm Petrel é sua melhor opção.
  • Se você precisar armazenar linhas de base em arquivos externos, escolha entre verificar .NET e Storm Petrel. Consulte as seções acima para determinar a melhor opção com base em seus requisitos específicos e detalhes do cenário.

Quando se trata de testes de instantâneos no .NET, ambas as ferramentas fornecem soluções fortes. Verifique se a comparação de petrel de tempestade se resume às demandas do seu projeto e se você prioriza o gerenciamento de linha de base por meio de código ou arquivos externos.

Para informações mais detalhadas, fique à vontade para Contate-nos E saiba mais sobre essas poderosas ferramentas de teste .NET.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *