visual unitarias unit test studio pruebas mvc c# visual-studio unit-testing resharper xunit

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.



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());