Saltar al contenido

¿Cómo agregar el registro de depuración a las pruebas unitarias de C# .NET Core?

Mantén la atención porque en este artículo vas a encontrar la contestación que buscas.Esta sección fue evaluado por nuestros expertos para garantizar la calidad y exactitud de nuestro contenido.

Solución:

Como está usando .NET Core, supondré que también está usando XUnit.

XUnit utiliza una interfaz específica para iniciar sesión en la consola, ITestOutputHelperque es inyectado por XUnit en los constructores de dispositivos de prueba.

Hay un paquete nuget https://www.nuget.org/packages/Divergic.Logging.Xunit que puede crear un ILogger envoltura alrededor ITextOutputHelper para poder pasarlos a sistemas que requieren la ILogger interfaz.

No uso un marco de inyección de dependencia para mis pruebas de XUnit y termino conectándolos yo mismo con versiones simuladas, así que esto es lo que hago.

public sealed class MyTestFixture

    private readonly ILogger _logger;

    public MyTestFixture(ITestOuputHelper helper)
    
        _logger = helper.BuildLoggerFor();
    

    [Fact]
    public void FooBar()
    
        var myClass = new MyClass(_logger);
        myClass.WizzBang();
    

Utilizar el AddLogging(IServiceCollection, Action) sobrecarga

var serviceProvider = new ServiceCollection()
    .AddLogging(builder => 
        builder.AddDebug();  //<--

        //...add other logging configuration as needed
    )
    .BuildServiceProvider();

//...

Lo que da acceso al constructor a través de un delegado de configuración.

Siguiendo con la respuesta de Matthews, según los documentos de xUnit aquí https://xunit.net/docs/capturing-output, es simple agregar el registro de consola a cualquier prueba de unidad según el ejemplo de su sitio:

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

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *