xunit.net

Saltar una clase de prueba completa en xUnit.net



(5)

¿Es posible omitir todas las pruebas de una clase específica como en NUnit?

[TestFixture] [Ignore("Reason")] public class TestClass { }


Agregando una razón casi después de un año después de la pregunta inicial. Tengo un conjunto de pruebas que están llamando a apis de servidor real, y me gustaría ejecutarlas a petición. Con nUnit, tiene el atributo Ignorar: con ese conjunto, el corredor de prueba omitirá esas pruebas, pero aún puedo ejecutarlo manualmente.

xUnit no tiene tal característica. El más cercano es establecer un atributo de nivel de clase, y comentarlo cuando quiero ejecutarlo.


Aquí está mi truco para evitar el error xUnit1000: las clases de prueba deben ser públicas (verificada en un solo hecho, creo que las teorías también pueden ser pirateadas de esta manera).

// Uncomment to enable tests //public class FactSwitch : FactAttribute { } // Uncomment to disable tests internal class FactSwitch : Attribute { } public class MyTests { [FactSwitch] public void MyTest1() { "it".ShouldBe("it"); } }


Aquí hay otro truco que requiere cambios mínimos en el código

using FactAttribute = System.Runtime.CompilerServices.CompilerGeneratedAttribute; using TheoryAttribute = System.Runtime.CompilerServices.CompilerGeneratedAttribute;

Cualquier atributo compatible puede ser utilizado para el reemplazo.

Si también usa el InlineDataAttribute entonces deberá definir un reemplazo ya que no creo que exista un atributo compatible existente.

using InlineDataAttribute = DummyDataAttribute; [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] internal class DummyDataAttribute : Attribute { public DummyDataAttribute(params object[] data) { } }


No, en la actualidad no existe tal facilidad.

Una forma rápida de lograr el efecto en xUnit es comentar al public : las clases privadas no se reflejan (aunque, obviamente, no aparecerá en la lista de omitir de esa manera).

Considere registrarlo como un problema en CodePlex si cree que la necesidad de esto es lo suficientemente común (personalmente no puedo imaginarme aumentando la votación ya que simplemente no me encuentro con los casos en los que necesito omitir una prueba completa por valor de pruebas).

ACTUALIZACIÓN: Otra forma es poner un TraitAttribute de TraitAttribute en la clase y luego (suponiendo que esté usando el corredor xunit.console ) filtrarlo ejecutando con /-trait traitName . (Por ejemplo, puede lograr ExplicitAttribute , algunos aspectos de la técnica de estructura BDD de las pruebas pendientes y semánticas similares de esa manera. Por supuesto, el gran problema es que no aparecen en ningún informe al usar cualquiera de estas técnicas de filtrado).

ACTUALIZACIÓN 2: Usted puede hacer

const string skip = "Class X disabled"; [Fact(Skip=skip)] void Test() {}

Luego puede cambiar a la const string skip = null para que const string skip = null y deshaga el salto. La (des) ventaja de esto es que la prueba todavía se muestra como una Prueba omitida en la lista de pruebas, generalmente con una razón incluida en el informe de ejecución de la prueba (en lugar de que sea private que hace que sea probable que se olvide)