×

Sử dụng xUnit để kiểm thử đơn vị mã nguồn trong C#

Trong thế giới phát triển phần mềm, việc kiểm thử đơn vị (unit testing) giữ vai trò vô cùng quan trọng nhằm đảm bảo chất lượng mã nguồn và phát hiện các lỗi ngay từ giai đoạn đầu. Trong C#, xUnit là một trong những framework được ưa chuộng để thực hiện nhiệm vụ này bởi tính hiệu quả và linh hoạt của nó.

Giới thiệu về xUnit

xUnit là một framework mã nguồn mở được sử dụng rộng rãi trong việc kiểm thử đơn vị cho các ứng dụng .NET. Nó được phát triển bởi cùng những người tạo ra NUnit và mang lại nhiều cải tiến tập trung vào đơn giản hóa quá trình kiểm thử. Một số điểm nổi bật của xUnit bao gồm:

  1. Khai báo thuộc tính linh hoạt: xUnit sử dụng các thuộc tính (attributes) như [Fact][Theory] để đánh dấu các phương pháp kiểm thử.
  2. Hỗ trợ kiểm thử bằng dữ liệu: Thông qua thuộc tính [Theory], bạn có thể thực hiện kiểm thử với nhiều bộ dữ liệu khác nhau.
  3. Tích hợp tốt với các công cụ CI/CD: xUnit tương thích tốt với các hệ thống tích hợp liên tục và triển khai liên tục như Jenkins, TeamCity, hay Azure DevOps.

Bắt đầu với xUnit

Để bắt đầu, bạn cần cài đặt xUnit thông qua NuGet Package Manager trong Visual Studio. Bạn có thể sử dụng lệnh sau trong NuGet Package Manager Console:

Install-Package xunit
Install-Package xunit.runner.visualstudio

Tạo lớp kiểm thử

Giả sử bạn có một lớp toán học đơn giản như sau:

public class Calculator
{
    public int Add(int a, int b) => a + b;
    public int Subtract(int a, int b) => a - b;
}

Bạn có thể viết các phương pháp kiểm thử như sau:

using Xunit;

public class CalculatorTests
{
    [Fact]
    public void Add_ReturnsCorrectSum()
    {
        // Arrange
        var calculator = new Calculator();

        // Act
        var result = calculator.Add(2, 3);

        // Assert
        Assert.Equal(5, result);
    }

    [Theory]
    [InlineData(4, 2, 2)]
    [InlineData(10, 5, 5)]
    [InlineData(0, 0, 0)]
    public void Subtract_ReturnsCorrectDifference(int a, int b, int expected)
    {
        // Arrange
        var calculator = new Calculator();

        // Act
        var result = calculator.Subtract(a, b);

        // Assert
        Assert.Equal(expected, result);
    }
}

Chạy kiểm thử

Sau khi viết các phương pháp kiểm thử, bạn có thể chạy chúng bằng cách sử dụng Test Explorer trong Visual Studio. Test Explorer sẽ liệt kê tất cả các kiểm thử đã được phát hiện và bạn có thể chạy, kiểm tra kết quả, và sửa lỗi ngay trong môi trường phát triển.

Kiểm thử nâng cao

xUnit còn hỗ trợ nhiều tính năng nâng cao khác như kiểm thử ngoại lệ, kiểm thử không đồng bộ (async/await), và tích hợp với Moq hoặc các thư viện mocking khác để tạo các mô hình ảo cho việc kiểm thử.

[Fact]
public async Task Divide_ThrowsDivideByZeroException()
{
    var calculator = new Calculator();

    var exception = await Assert.ThrowsAsync<DivideByZeroException>(() => calculator.DivideAsync(10, 0));

    Assert.Equal("Attempted to divide by zero.", exception.Message);
}

Trong ví dụ trên, phương pháp DivideAsync được kiểm thử để xác nhận rằng nó ném ra ngoại lệ phù hợp khi chia cho 0.

Kết luận

Việc sử dụng các framework kiểm thử như xUnit không chỉ giúp cải thiện chất lượng mã nguồn mà còn tăng độ tin cậy và hiệu suất của ứng dụng. Với xUnit, bạn sẽ tìm thấy một công cụ mạnh mẽ và dễ sử dụng để thực hiện các kiểm thử đơn vị một cách hiệu quả trong C#. Từ việc kiểm thử các chức năng cơ bản cho đến các tình huống phức tạp, xUnit đều cung cấp những phương tiện hữu ích giúp đảm bảo mã nguồn của bạn hoạt động đúng như mong đợi.

Comments