test - pruebas unitarias c# visual studio 2017
Usando ReSharper, ¿cómo mostrar la salida de depuración durante una prueba unitaria de larga duración? (4)
Estoy usando xUnit con el corredor de prueba ReSharper y el complemento xUnitContrib .
Cuando tengo una prueba de larga duración, me gustaría poder enviar un indicador de progreso a la ventana de Resultados de la prueba de la unidad.
He intentado Debug.WriteLines
, Trace.WriteLine
y Console.WriteLine
. Todos los cuales tienen el mismo comportamiento: nada se muestra en la ventana de resultados hasta que la prueba se haya completado.
Por ejemplo:
[Fact]
public void Test()
{
Debug.WriteLine("A");
Trace.WriteLine("B");
Console.WriteLine("C");
Thread.Sleep(10000);
}
La prueba no muestra salida hasta que hayan transcurrido los 10 segundos y la prueba finalice. ¿Cómo obtengo salida en el camino?
ACTUALIZACIÓN 1
Intenté también con MSTest y NUnit. NUnit es el único que muestra resultados en el camino.
MSTest y XUnit no devuelven ninguna salida hasta que se completa la prueba. La parte extraña es que mientras que la salida de prueba de XUnit y NUnit se ve así:
A
B
C
La salida de MSTest se ve así:
C
Debug Trace:
A
B
Dadas todas estas variaciones, creo que la respuesta es que depende de la implementación del corredor de prueba decidir cómo y cuándo realizar la salida. ¿Alguien sabe si es posible configurar el corredor de prueba XUnit?
ACTUALIZACIÓN 2
Creo que esto debe ser una deficiencia en xUnitContrib. Publicado en su tracker de CodePlex .
Si usó xUnit.net 1.x, es posible que haya estado escribiendo resultados en la Consola, Depuración o Rastreo. Cuando xUnit.net v2 se envió con la paralelización activada de manera predeterminada, este mecanismo de captura de salida ya no era apropiado; es imposible saber cuál de las muchas pruebas que podrían ejecutarse en paralelo fue responsable de escribir en esos recursos compartidos. Los usuarios que están transfiriendo código de v1.x a v2.x deben usar uno de los dos nuevos métodos en su lugar.
Eche un vistazo aquí, por ejemplo, sobre cómo realizar el registro con xUnit.net v2:
http://xunit.github.io/docs/capturing-output.html
Este es el ejemplo:
using Xunit;
using Xunit.Abstractions;
public class MyTestClass
{
private readonly ITestOutputHelper output;
public MyTestClass(ITestOutputHelper output)
{
this.output = output;
}
[Fact]
public void MyTest()
{
var temp = "my class!";
output.WriteLine("This is output from {0}", temp);
}
}
Lo más fácil que he encontrado es utilizar log4net y crear un registrador de consola. En el camino, mientras corres, llamarás a logger.Info ("información aquí"); o log.Debug ("información aquí"); - en realidad, sea cual sea su nivel de registro preferido - y la salida se mostrará en Sesiones de prueba de unidad de compartimiento.
Lea más sobre el marco log4net en la página de inicio de Apache log4net . Los ejemplos de configuración también serán invaluables.
Por Brad Wilson :
Esta es una limitación en xUnit.net, no en el adaptador Resharper.
Vamos a abordar esto en v2 de xUnit.net.
ReSharper de alguna manera eliminó el oyente predeterminado en las pruebas unitarias. Para mostrar texto en la ventana de salida, solo agregue esta línea:
Debug.Listeners.Add(new DefaultTraceListener());