.Net Core


Instalación

Se debe descargar el .Net SDK y un editor de código fuente, para este caso Visual Studio Code donde se instalara la extensión C#

Creación de aplicación de consola

Se debe crear una carpeta con el nombre del proyecto para este caso _HelloWorldProject _y abrir dicha carpeta con visual studio code.

Para inicializar un proyecto C# en la terminal integrada (View/Integrated Terminal) de visual studio code ejecutamos

dotnet new console

Para compilar:

dotnet restore

Para ejecutar:

dotnet run

Debug

  1. Abrir el archivo Program.cs y al ser la primera vez nos preguntara si deseamos descargar los complementos necesarios para hacer debug y seleccionamos si.
  2. Reiniciamos vs code para que carguen los nuevos complemento
  3. En el código se pone un punto de interrupción donde deseamos hacer debug, en el panel izquierdo de vs code seleccionamos debug, seleccionamos .Net Core Launch (console) y ejecutar

Pruebas unitarias con xUnit

Vamos a crear un proyecto de librería de clases para validar si un número es primo o no y un proyecto de pruebas para validar esta funcionalidad.

  1. Se debe crear una carpeta para este caso xunit-testing y la abrimos con vs code

  2. Para crear una nueva solución en la terminal integrada ejecutar:

  3. dotnet new sln
    
  4. Dentro de la solución crear una nueva carpeta para el proyecto fuente de las pruebas. Para este caso PrimeService y navegamos a ella en la consola
  5. mkdir PrimeService
    cd PrimeService
    
  6. Para crear una nueva librería se debe ejecutar:

  7. dotnet new classlib
    
  8. Renombrar la clase creada por PrimeService y para usar el desarrollo orientado a pruebas (TDD) se debe crear una implementación de error de la siguiente manera:
  9. using System;
    
    namespace Prime.Services
    {
        public class PrimeService
        {
    
            public bool IsPrime(int candidate)
            {
                throw new NotImplementedException("Please create a test first");
            }
    
        }
    }
    
  10. Cambiar nuevamente al directorio de la solución.

  11. cd ..
    
  12. Agregamos el proyecto de biblioteca de clases creado a la solución.

  13. dotnet sln add ./PrimeService/PrimeService.csproj
    
  14. Ahora se debe crear el proyecto de pruebas en el cual crearemos una nueva carpeta. Para este caso PrimeService.Tests

  15. mkdir PrimeService.Tests
    cd PrimeService.Tests
    
  16. Se debe crear un proyecto nuevo de pruebas con xunit.

  17. dotnet new xunit
    
  18. Se debe agregar la referencia del proyecto de clases.

  19. dotnet add reference ../PrimeService/PrimeService.csproj
    
  20. Cambiar nuevamente al directorio de la solución.

  21. cd ..
    
  22. Agregar el proyecto de pruebas a la solución.

  23. dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj
    
  24. El enfoque de TDD requiere la escritura de una prueba con errores, después se valida y luego se repite el proceso. Para realizar este proceso, del proyecto de pruebas eliminar la clase UnitTest1 y creamos un archivo PrimeService_IsPrimeShould.cs

  25. using Xunit;
    using Prime.Services;
    
    namespace Prime.UnitTests.Services
    {
        public class PrimeService_IsPrimeShould {
    
            private readonly PrimeService _primeService;
    
            public PrimeService_IsPrimeShould()
            {
                _primeService = new PrimeService();
            }
    
            //El atributo [Fact] indica un método de prueba que el ejecutor de pruebas ejecuta.
            [Fact]
            public void ReturnFalseGivenValueOf1()
            {
                var result = _primeService.IsPrime(1);
                Assert.False(result, "1 no es primo"); //Espero que me retorne false
            }
        }
    }
    
  26. En PrimeService.Tests ejecutar la prueba

  27. dotnet test
    
  28. La prueba produce un error ya que no se ha creado la implementación. Para esto se debe modificar la función IsPrime de PrimeService.

  29. public bool IsPrime(int candidate){
    
        if (candidate < 2) 
            return false; 
    
        for (var divisor = 2; divisor <= Math.Sqrt(candidate); divisor++) 
        { 
            if (candidate % divisor == 0) 
                return false; 
        } 
        return true;
    
    }
    
  30. Ejecutamos la prueba de nuevo y ahora debe pasar.

  31. Para agregar mas características modificamos la clase de pruebas PrimeService_IsPrimeShould.cs

  32. [Theory] //Indica que ejecuta un conjunto de pruebas que ejecutan el mismo código
    [InlineData(-1)] //Especifica valores para las entradas
    [InlineData(0)]
    [InlineData(1)]
    public void ReturnFalseGivenValuesLessThan2(int value)
    {
        var result = _primeService.IsPrime(value);
        Assert.False(result, $"{value} no es primo");
    }
    
    [Theory]
    [InlineData(7)]
    public void ReturnTrueGivenPrimesLessThan10(int value)
    {
        var result = _primeService.IsPrime(value);
        Assert.True(result, $"{value} es primo");
    }
    
  33. Ejecutar la prueba y todas deben de pasar.

results matching ""

    No results matching ""