M4 ‐ Extra Unit Testing - sjperalta/Web-Service-C-sharp GitHub Wiki

Claro, te mostraré cómo configurar un proyecto de pruebas unitarias en Visual Studio Code (VS Code) utilizando .NET CLI, xUnit y Moq.

Paso 1: Crear la Solución y Proyectos

  1. Abrir VS Code y abrir una terminal integrada.

  2. Crear la solución :

    cd ..
    dotnet new xunit -n TodoApiRestfull.Tests
    cd TodoApiRestfull.Tests
    dotnet add reference ../TodoApiRestfull.csproj
    Screenshot 2024-05-28 at 5 52 09 PM

    Agrega el nuevo proyecto de la solucion al projecto principal

    cd ..
    cd TodoApiRestfull
    dotnet sln add TodoApiRestfull.Tests/TodoApiRestfull.Tests.csproj
Screenshot 2024-05-28 at 5 50 07 PM
  1. Instalar paquetes NuGet necesarios:
    dotnet add package Moq.EntityFrameworkCore
    dotnet add package Microsoft.EntityFrameworkCore.InMemory

Paso 2: Escribir las Pruebas Unitarias

  1. Crear un archivo de prueba:

    • En el proyecto TodoApiRestfull.Tests, crea una carpeta llamada Services y dentro de ella un archivo llamado TodoItemServiceTests.cs.
  2. Escribir pruebas unitarias:

    • Aquí tienes ejemplos de pruebas para GetTodoItemsAsync, GetTodoItemAsync y CreateTodoItemAsync.
using Microsoft.EntityFrameworkCore;
using Moq;
using Moq.EntityFrameworkCore;
using TodoApiRestfull.Data;
using TodoApiRestfull.Models;
using TodoApiRestfull.Services;
using Xunit;

namespace TodoApiRestfull.Tests.Services
{
    public class TodoItemServiceTests
    {
        private readonly TodoService _service;
        private readonly Mock<TodoContext> _mockContext;

        public TodoItemServiceTests()
        {
            _mockContext = new Mock<TodoContext>();
            _mockContext.SetupGet(x => x.TodoItems).ReturnsDbSet(GenerateItems);        
            _service = new TodoService(_mockContext.Object);
        }

        private IList<TodoItem> GenerateItems =>
            new List<TodoItem>
            {
                new TodoItem { Id = 1, Name = "Task 1", IsComplete = false },
                new TodoItem { Id = 2, Name = "Task 2", IsComplete = true },
                new TodoItem { Id = 2, Name = "Task 2 test", IsComplete = true }
            };

        [Fact]
        public async Task GetTodoItemsAsync_should_return_all_items()
        {
            // Arrange
            // Act
            var result = await _service.GetTodoItemsAsync();

            // Assert
            Assert.Equal(2, result.Count());
            Assert.Equal("Task 1", result.First().Name);
        }

        [Fact]
        public async Task GetTodoItemAsync_should_returns_correct_item()
        {
            // Arrange
            // Act
            var result = await _service.GetTodoItemAsync(1);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(1, result.Id);
            Assert.Equal("Task 1", result.Name);
        }

        [Fact]
        public async Task CreateTodoItemAsync_should_adds_new_item()
        {
            // Arrange
            var options = new DbContextOptionsBuilder<TodoContext>()
                .UseInMemoryDatabase(databaseName: "Test_CreateTodoItem")
                .Options;

            using (var context = new TodoContext(options))
            {
                var service = new TodoService(context);
                var newItem = new TodoItem { Id = 3, Name = "New Task", IsComplete = false };

                // Act
                var result = await service.CreateTodoItemAsync(newItem);

                // Assert
                Assert.Equal(3, result.Id);
                Assert.Equal("New Task", result.Name);
            }

            // Verify item was added
            using (var context = new TodoContext(options))
            {
                Assert.Equal(1, context.TodoItems.Count());
                Assert.Equal("New Task", context.TodoItems.Single().Name);
            }
        }
    }
}

Paso 3: Ejecutar las Pruebas

  1. Ejecutar las pruebas desde la terminal:
    • En la terminal, navega a la carpeta del proyecto de pruebas (tests/TodoApiRestfull.Tests) y ejecuta:
      dotnet test
Screenshot 2024-05-28 at 7 04 29 PM
  1. Configurar VS Code para ejecutar pruebas:
    • Instala la extensión de prueba .NET Core Test Explorer desde el marketplace de VS Code.
    • Abre el explorador de pruebas y ejecuta las pruebas desde allí.

Con estos pasos, tienes configurado un proyecto de pruebas unitarias en Visual Studio Code usando xUnit y Moq, lo que te permitirá asegurarte de que tu servicio TodoItemService funciona correctamente.

⚠️ **GitHub.com Fallback** ⚠️