xunit - microsoft - visual studio installer
¿Cómo puedo omitir pruebas específicas en xUnit en función de la plataforma actual? (5)
Este sería un uso ideal de rasgos, pero desafortunadamente, ni la línea de comandos ni el archivo de proyecto xml admiten el filtrado basado en rasgos. Valdría la pena agregar un problema al sitio de codeplex para esto.
- Tengo un ensamblaje que he construido en Windows
- Quiero ejecutar las pruebas de xUnit en mono en Linux.
Sin embargo, he encontrado que si bien 400 de estas pruebas pueden ejecutarse (en orden), ciertas pruebas pueden bloquear el corredor xUnit, o bien reducirlo por completo.
No me importa si ciertas pruebas no pueden ejecutarse en Linux, ciertas pruebas tienen que ver con el DTC y con algunos Gumph no administrados que no necesitamos admitir allí.
Sin embargo, lo que sí quiero es aplicar un ignorar a esas pruebas, y tener el hecho de que la prueba fue ignorada correctamente marcada en la salida de compilación.
La pregunta se puede resumir en una serie de posibles soluciones.
- ¿Cómo ejecuto pruebas específicas en xUnit a través del corredor de la consola? (No he encontrado documentación para este fin, tal vez no estoy buscando lo suficiente)
- ¿Es posible ir por el otro lado y decir: "Aquí hay un ensamblaje, aunque ignore estas pruebas específicas"
- Tener un atributo en esas pruebas se ha sugerido como una mejor manera de documentar formalmente que estas pruebas son específicas de la plataforma. ¿Es esto posible?
Si pudiera evitar modificar demasiado el código original, eso sería grandioso, ya que el código no es realmente mío para cambiar, y la aplicación de muchos hacks multiplataforma probablemente no caiga demasiado bien.
Esto ahora está resuelto en 1.8 - puedes filtrar por Rasgos. Ver este registro de problemas .
Actualización: los rasgos funcionan con el corredor de la consola pero no con MSBuild. He agregado una solicitud de función para este soporte.
Evitaría externalizar las pruebas de omisión (es decir, un archivo de configuración / comando si es posible). Esto va en contra de hacer que las pruebas sean fáciles de ejecutar y confiables. Hacer que las pruebas ignoradas en el código sea el enfoque más seguro cuando otras personas comienzan a involucrarse.
Podría ver una serie de opciones, aquí hay dos que implican la modificación del código existente.
Opción 1: la detección de plataforma de tiempo de compilación más intrusiva
En la Solución VS, defina otra configuración que defina un indicador MONOWIN
precompilador (solo para que sea explícitamente un indicador que dice que es para el código compilado en Windows para su uso en Mono).
Luego defina un atributo que hará que la prueba se ignore cuando se compile para Mono:
public class IgnoreOnMonoFactAttribute : FactAttribute {
#if MONOWIN
public IgnoreOnMonoFactAttribute() {
Skip = "Ignored on Mono";
}
#endif
}
En realidad, es difícil encontrar ventajas para este método, ya que implica burlarse de la solución original y agrega otra confirmación que debe ser compatible.
Opción 2 - algo intrusiva - detección de plataforma en tiempo de ejecución
Aquí hay una solución similar a la opción 1, excepto que no se requiere una configuración separada:
public class IgnoreOnMonoFactAttribute : FactAttribute {
public IgnoreOnMonoFactAttribute() {
if(IsRunningOnMono()) {
Skip = "Ignored on Mono";
}
}
/// <summary>
/// Determine if runtime is Mono.
/// Taken from http://.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
xUnit runner ejecutará un método dos veces si está marcado con [Fact]
e [IgnoreOnMonoFact]
. (CodeRush no hace eso, en este caso supongo que xUnit es correcto). Esto significa que cualquier método de prueba debe tener [Fact]
reemplazado con [IgnoreOnMonoFact]
Nota 2
El corredor de prueba CodeRush todavía ejecutó la prueba [IgnoreOnMonoFact]
, pero ignoró la prueba [Fact(Skip="reason")]
. Supongo que se debe a que CodeRush refleja xUnit y no se ejecuta realmente con la ayuda de las bibliotecas xUnit. Esto funciona bien con el corredor xUnit.
Hay nuevas opciones ahora.
Agregue el paquete Nuget SkippableFact, que le permite usar [SkippableFact]
lugar de [Fact]
y puede usar Skip.<xyz>
dentro de una prueba para omitir dinámicamente la prueba durante el tiempo de ejecución.
Ejemplo:
[SkippableFact]
public void SomeTestForWindowsOnly()
{
Skip.IfNot(Environment.IsWindows);
// Test Windows only functionality.
}
XUnit v2.0 ya está disponible. Las pruebas que se pueden omitir son compatibles con él directamente. Utilizar:
[Fact (Skip = "specific reason")]