¿Cómo me salto pruebas específicas en xUnit basados ??en la plataforma actual

StackOverflow https://stackoverflow.com/questions/4421328

  •  09-10-2019
  •  | 
  •  

Pregunta

  • Tengo un montaje que he construido en Windows
  • Quiero ejecutar las pruebas xUnit en Mono en Linux.

Sin embargo, he encontrado que mientras que 400 de estas pruebas pueden funcionar (en orden), que ciertas pruebas o bien colgar el corredor xUnit, o bajarla por completo.

No atención si ciertas pruebas no son capaces de funcionar en Linux, ciertas pruebas tienen que ver con el DTC y algunos gumph administrado que no necesitamos para apoyar allí.

Lo que yo quiero sin embargo, es aplicar un ignoran a esas pruebas, y tener el hecho de que la prueba fue ignorada marcado correctamente en el resultado de generación.

La pregunta puede reducirse a supongo que una serie de posibles soluciones

  • ¿Cómo realizar pruebas específicas en xUnit a través del corredor de la consola? (No he encontrado documentación para este fin, tal vez simplemente no estoy buscando lo suficiente)
  • ¿Es posible ir a otro lado y decir "Aquí es un montaje, por favor, ignora estas pruebas específicas aunque"
  • Tener un atributo en estas pruebas ha sugerido una mejor manera, para documentar formalmente que estas pruebas son específicas plataforma - es esto posible

Si pudiera evitar modificar el código original demasiado que sería grande, ya que el código no es realmente mío para el cambio, y la aplicación de una gran cantidad de hacks multiplataforma probablemente no va a bajar demasiado bien.

¿Fue útil?

Solución

Yo evitaría la externalización de las pruebas de salto de imagen (es decir, un archivo de configuración / comando si es posible). Este algo va en contra de hacer las pruebas fácil de ejecutar y de confianza. Hacer las pruebas ignoradas en el código es el método más seguro cuando otras personas empiezan a involucrarse.

Me podía ver una serie de opciones, aquí hay dos que implican la modificación del código existente.

Opción 1 - El más, la plataforma de tiempo de compilación intrusivo detección

En la solución de VS, definir otra configuración que define un MONOWIN bandera precompilador (justo para que sea explícitamente una bandera el dice que es para el código compilado en Windows para su uso en Mono).

A continuación, definir un atributo que le hará la prueba ignorado cuando se compila para Mono:

public class IgnoreOnMonoFactAttribute : FactAttribute {
#if MONOWIN
    public IgnoreOnMonoFactAttribute() {
        Skip = "Ignored on Mono";
    }
#endif
}

En realidad es difícil encontrar ventajas de este método, ya que implica burlarse con la solución original y añade otra confiration que necesita ser compatibles.

Opción 2 - algo intrusivo - plataforma de ejecución de detección

Aquí es una solución similar a option1, excepto que no se requiere de configuración independiente:

public class IgnoreOnMonoFactAttribute : FactAttribute {

    public IgnoreOnMonoFactAttribute() {
        if(IsRunningOnMono()) {
            Skip = "Ignored on Mono";
        }
    }
    /// <summary>
    /// Determine if runtime is Mono.
    /// Taken from http://stackoverflow.com/questions/721161
    /// </summary>
    /// <returns>True if being executed in Mono, false otherwise.</returns>
    public static bool IsRunningOnMono() {
        return Type.GetType("Mono.Runtime") != null;
    }
}

Nota 1

corredor xUnit se ejecutará un método dos veces si está marcado con [Fact] y [IgnoreOnMonoFact]. (CodeRush no hace eso, en este caso supongo xUnit es correcta). Esto significa que los métodos de cualquier exámenes se deben haber [Fact] reemplazados con [IgnoreOnMonoFact]

Nota 2

corredor de prueba CodeRush todavía corrió la prueba [IgnoreOnMonoFact], pero hizo caso omiso de la prueba [Fact(Skip="reason")]. Lo que supongo que se debe a que refleja CodeRush xUnit y en realidad no se ejecuta con la ayuda de las bibliotecas xUnit. Esta multa trabaja con el corredor xUnit.

Otros consejos

XUnit v2.0 ya está disponible. pruebas de que se pueden omitir son soportados por ella directamente. Uso:

[Fact (Skip = "specific reason")]

Hay una nueva opciones ahora.

SkippableFact , lo que le permite utilizar [SkippableFact] en lugar de [Fact] y puede utilizar Skip.<xyz> dentro de unos exámenes para dinámicamente omitir la prueba durante el tiempo de ejecución.

Ejemplo:

[SkippableFact]
public void SomeTestForWindowsOnly()
{
    Skip.IfNot(Environment.IsWindows);

    // Test Windows only functionality.
}

Esto sería un uso ideal de rasgos, pero, por desgracia, ni la línea de comandos ni los soportes de archivos de proyecto XML filtrado basado en rasgos. Valdría la adición de un problema con el sitio CodePlex para esto.

Esto ahora se resuelve en 1,8 - puede filtrar en los rasgos. Ver este registro tema.

Actualizar:. Rasgos de trabajo con el corredor de la consola, pero no MSBuild, he añadido una de estas solicitudes por este apoyo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top