Nunit: [Pedido] no permite duplicados en TestFixtures, ¿defecto de documentación?

Creado en 9 oct. 2018  ·  4Comentarios  ·  Fuente: nunit/nunit

Según la documentación: https://github.com/nunit/docs/wiki/Order-Attribute

El OrderAttribute se puede colocar en un método de prueba o dispositivo para especificar el orden en que se ejecutan las pruebas.

No veo que se respete esta documentación de dos maneras diferentes.

Considere los siguientes casos de TextFixture

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

Esto me parece más un defecto de documentación/comprensión que otra cosa, pero la forma en que el documento vinculado dice "_o accesorio_" me implica que podría escribir

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

Cuando en realidad esto es un error de compilación para 1, 2 y 3

Atributo 'Orden' duplicado

Sin embargo, sería muy bueno que esto funcionara intuitivamente con duplicados.

Todos 4 comentarios

@Aarskin Nos ayuda tanto a nosotros (los desarrolladores de NUnit) como a los usuarios si la discusión sobre un solo problema se mantiene dentro de un solo problema de gitHub.

La variante que está describiendo aquí es básicamente la misma que en el #3055. Eso es esto...

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

es lo mismo que si hubieras escrito...

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

así como cualquier otro orden de los ocho atributos que quieras usar. Los cuatro atributos TestFixture se colocan en la misma clase, lo que hace que NUnit cree una instancia de esa clase cuatro veces. Los cuatro atributos Order también se colocan en la misma clase, lo que provoca un conflicto ya que una prueba solo puede tener un orden.

Esto __no__ es una limitación de NUnit. Así es como funciona la sintaxis de atributos de C#. Hay dos puntos clave a tener en cuenta:

  1. Cualquier atributo entre corchetes se aplica al siguiente elemento del código que puede aceptar un atributo. En este caso, es la clase.

  2. Una secuencia de atributos entre corchetes, como [A, B, C] tiene exactamente el mismo significado que la misma secuencia dentro de pares separados de corchetes, como [A] [B] [C].

Por una cuestión de estilo, evito usar la sintaxis de coma con atributos que provocan la creación de varias instancias de una prueba, porque genera confusión.

Esto podría reformularse para permitir una propiedad/parámetro Order en TestFixture , pero antes de considerar eso, ¿puede darnos un caso de uso? Generalmente Order se usa para ejecutar pruebas de integración en una secuencia en la que realiza partes de una operación más larga en orden en sus pruebas. El TestFixture parametrizado generalmente se usa para probar las mismas pruebas con diferentes datos de entrada. No puedo pensar en un escenario en el que quieras hacer eso en un orden particular.

Mi caso de uso es la prueba de regresión de negocios lógicos, y la propiedad/parámetro en TestFixture no puedo ordenar que se rompa la forma en que quiero usar NUnit. Más que antes, estos marcos se utilizan no solo para pruebas unitarias.

Como solución alternativa, puede cambiar a TestFixtureSource en lugar de varios atributos TestFixture . Siempre que solo haya un TestFixtureSourceAttribute , los accesorios se ejecutarán en el orden en que devuelvas los datos para ellos.

¿Fue útil esta página
0 / 5 - 0 calificaciones