Nunit: [Order] não permite duplicatas em TestFixtures, defeito de documentação?

Criado em 9 out. 2018  ·  4Comentários  ·  Fonte: nunit/nunit

De acordo com a documentação: https://github.com/nunit/docs/wiki/Order-Attribute

O OrderAttribute pode ser colocado em um método de teste ou acessório para especificar a ordem na qual os testes são executados.

Não estou vendo essa documentação ser respeitada de duas maneiras diferentes.

Considere os seguintes casos TextFixture

[TestFixture("A", false)]
[TestFixture("B", false)]
[TestFixture("A", true)]
[TestFixture("B", true)]

Isso me parece mais um defeito de documentação/compreensão do que qualquer coisa, mas a maneira como o documento vinculado declara "_ou fixture_" implica para mim que eu poderia escrever

[TestFixture("A", false), Order(0)]
[TestFixture("B", false), Order(1)]
[TestFixture("A", true), Order(2)]
[TestFixture("B", true), Order(3)]

Quando na realidade este é um erro do compilador para 1, 2 e 3

Atributo 'Ordem' duplicado

No entanto, seria muito bom que isso funcionasse intuitivamente com duplicatas.

Todos 4 comentários

@Aarskin Ajuda tanto a nós (os desenvolvedores do NUnit) quanto aos usuários se a discussão sobre um único problema for mantida em um único problema do gitHub.

A variante que você está descrevendo aqui é basicamente a mesma do #3055. Ou seja, isso...

[TestFixture("A", false), Order(0)]
[TestFixture("B", false), Order(1)]
[TestFixture("A", true), Order(2)]
[TestFixture("B", true), Order(3)]

é a mesma coisa que se você tivesse escrito...

[TestFixture("A", false)]
[TestFixture("A", true)]
[TestFixture("B", true)]
[TestFixture("B", false)]
[Order(3)]
[Order(2)]
[Order(1)]
[Order(0)]

assim como qualquer outra ordem dos oito atributos que você deseja usar. Os quatro atributos TestFixture são todos colocados na mesma classe, fazendo com que o NUnit instancie essa classe quatro vezes. Os quatro atributos Order também são colocados na mesma classe, causando um conflito, pois um teste pode ter apenas um pedido.

Esta é __não__ uma limitação do NUnit. É como a sintaxe do atributo C# funciona. Há dois pontos-chave a serem observados:

  1. Qualquer atributo entre colchetes se aplica ao próximo elemento no código que pode aceitar um atributo. Neste caso, é a classe.

  2. Uma sequência de atributos entre colchetes, como [A, B, C] tem exatamente o mesmo significado que a mesma sequência dentro de pares separados de colchetes, como [A] [B] [C].

Por uma questão de estilo, evito usar a sintaxe de vírgula com atributos que causam a criação de várias instâncias de um teste, porque isso gera confusão.

Isso poderia ser reformulado para permitir uma propriedade/parâmetro Order no TestFixture , mas antes de considerarmos isso, você pode nos dar um caso de uso? Geralmente Order é usado para executar testes de integração em uma sequência em que você executa partes de uma operação mais longa em ordem em seus testes. TestFixture parametrizado geralmente é usado para testar os mesmos testes com dados de entrada diferentes. Não consigo pensar em um cenário em que você gostaria de fazer isso em uma ordem específica.

Meu caso de uso é teste de regressão de negócios lógicos e a propriedade/parâmetro no TestFixture não consigo ordenar a quebra da maneira que quero usar o NUnit. Mais do que antes, esses frameworks são usados ​​não apenas para teste de unidade.

Como solução alternativa, você pode alternar para TestFixtureSource em vez de vários atributos TestFixture . Desde que haja apenas um TestFixtureSourceAttribute , os fixtures serão executados na ordem em que você retornar os dados para eles.

Esta página foi útil?
0 / 5 - 0 avaliações