IRONSOFTWAREHOME
AKTUALNOŚCI DLA PROGRAMISTÓW

AutoFixture C# (Jak to działa dla programistów)

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Jacob Mellor
Updated: 21 kwietnia 2026

AutoFixture to biblioteka open source dla platformy .NET, której celem jest zminimalizowanie fazy "Arrange" podczas pisania testów jednostkowych, a tym samym usprawnienie zarządzania testami. Jego głównym celem jest umożliwienie programistom skupienia się na tym, co testują, a nie na procesie konfiguracji, poprzez umożliwienie tworzenia grafów obiektów z danymi testowymi. W tym artykułe omówiono, w jaki sposób AutoFixture może ułatwić programowanie sterowane testami poprzez wydajne generowanie danych testowych.

AutoFixture to potężna biblioteka w języku C# zaprojektowana w celu usprawnienia procesu tworzenia danych testowych dla testów jednostkowych. Pomaga programistom uniknąć pisania powtarzalnego kodu konfiguracyjnego poprzez automatyczne generowanie danych dla przypadków testowych. W testowaniu jednostkowym AutoFixture zapewnia usprawnione podejście do generowania danych testowych, gwarantując, że każdy test jednostkowy jest wykonywany przy użyciu zróżnicowanych i realistycznych danych wejściowych. AutoFixture zwiększa wydajność testowania w języku C# poprzez automatyczne generowanie danych testowych, co ogranicza konieczność ręcznej konfiguracji.

AutoFixture C# (Jak to działa dla deweloperów): Rysunek 1 - AutoFixture

Instalacja i konfiguracja AutoFixture

AutoFixture jest dostępne jako pakiet NuGet i można je zainstalować za pomocą konsoli NuGet Package Manager Console lub opcji dodawania pakietów .NET w interfejsie użytkownika NuGet Package Manager w programie Visual Studio.

PM > Install-Package AutoFixture

NuGet pobierze i zainstaluje najnowszą wersję AutoFixture oraz jej zależności w Twoim projekcie.

Przykład tworzenia danych testowych dla klasy

Załóżmy, że mamy prostą klasę pracownika z właściwościami takimi jak FirstName, LastName i Age. Zamiast ręcznie tworzyć instancje tej klasy w naszych testach jednostkowych, możemy wykorzystać AutoFixture do generowania losowych danych.

public class Employee
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }

    public Employee(string firstName, string lastName, int age)
    {
        FirstName = firstName;
        LastName = lastName;
        Age = age;
    }

    public string GetFullName() => $"{FirstName} {LastName}";
}

Opis kodu

Klasa Employee enkapsuluje istotne szczegóły pracownika, w tym jego imię, nazwisko i wiek, reprezentowane przez właściwości FirstName, LastName i Age odpowiednio. Jego konstruktor ułatwia instancjonowanie obiektu pracownika poprzez przyjmowanie tych szczegółów jako parametrów i przypisywanie ich do odpowiednich właściwości. Dodatkowo, metoda GetFullName konkatenuje imię i nazwisko pracownika, zwracając pełne imię i nazwisko jako ciąg tekstowy.

Konfiguracja kodu dla naszego scenariusza testowego

Następnie utworzymy klasę testową do testowania klasy Employee:

using AutoFixture;

public class EmployeeTests
{
    private readonly IFixture _fixture;

    public EmployeeTests()
    {
        // Using AutoFixture's Fixture to create test data
        _fixture = new Fixture();
    }
}

Opis kodu

Ten fragment kodu integruje AutoFixture z testowaniem jednostkowym dla klasy Employee. Importując przestrzeń nazw AutoFixture, deweloperzy uzyskują dostęp do funkcjonalności generowania danych. Pole _fixture, zainicjowane nową instancją Fixture, usprawnia tworzenie danych testowych. To ustawienie zwiększa efektywność i niezawodność testów dla kompleksowego pokrycia klasy Employee.

Przykład 1: Sprawdzanie poprawności wartości obiektu testowego pracownika

[Fact]
public void Employee_ShouldHaveValidValues()
{
    // Arrange
    var firstName = _fixture.Create<string>();
    var lastName = _fixture.Create<string>();
    var age = _fixture.Create<int>();

    // Act
    var employee = new Employee(firstName, lastName, age);

    // Assert
    Assert.Equal(firstName, employee.FirstName);
    Assert.Equal(lastName, employee.LastName);
    Assert.Equal(age, employee.Age);
}

Opis kodu

Metoda testowa Employee_ShouldHaveValidValues weryfikuje, czy klasa Employee poprawnie inicjuje swoje właściwości z podanymi wartościami. Używając urządzenia testowego do generowania losowych danych dla FirstName, LastName i Age, test tworzy instancję Employee. Następnie sprawdza, czy właściwości FirstName, LastName i Age obiektu Employee odpowiadają wygenerowanym wartościom, zapewniając, że konstruktor poprawnie ustawia te właściwości.

Przykład 2: Sprawdzanie poprawności danych pracownika przy wywołaniu konstruktóra

[Fact]
public void CreateEmployee_ValidData_ReturnsEmployeeObject()
{
    // Arrange
    var employee = _fixture.Create<Employee>();

    // Act 
    // Assert
    Assert.NotNull(employee);
    Assert.False(string.IsNullOrEmpty(employee.FirstName));
    Assert.NotNull(employee.LastName);
    Assert.True(employee.Age > 0);
}

Opis kodu

Ta metoda testowa zawiera asercje testowe, które sprawdzają, czy właściwości obiektu Employee odpowiadają losowo wygenerowanym wartościom. Weryfikuje, czy właściwości typu string FirstName i LastName, oraz int Age są prawidłowo ustawione i ważne. Wszelkie nieudane asercje sygnalizują niezgodność między wartościami oczekiwanymi a losowymi wartościami wygenerowanymi dla danych pracowników.

AutoFixture C# (Jak to działa dla deweloperów): Rysunek 2 - Jednostkowy Test Danych Pracownika

Przedstawiamy IronPDF

IronPDF C# PDF Library to solidna biblioteka C# do obsługi plików PDF opracowana przez Iron Software, która ułatwia odczytywanie tekstu z plików PDF oraz tworzenie dokumentów PDF przy użyciu HTML. To wszechstronne narzędzie umożliwia konwersję łatwych do formatowania dokumentów, wraz z informacjami o stylu, na wysokiej jakości pliki PDF. Dzięki IronPDF generowanie plików PDF z tekstu HTML jest procesem płynnym, umożliwiającym użytkownikom pobieranie treści HTML z adresów URL i przekształcanie ich w dobrze ustrukturyzowane pliki PDF. Ta funkcja sprawia, że IronPDF jest niezbędnym narzędziem dla programistów, którzy chcą zautomatyzować i usprawnić tworzenie profesjonalnych dokumentów PDF bezpośrednio z treści internetowych.

AutoFixture C# (Jak to działa dla deweloperów): Rysunek 3 - IronPDF

Instalacja IronPDF

Otwórz konsolę NuGet Package Manager i uruchom następujące polecenie:

PM > Install-Package IronPdf

Przykład kodu wykorzystujący funkcje AutoFixture z IronPDF

Poniżej znajduje się przykład ilustrujący wykorzystanie AutoFixture wraz z IronPDF do wygenerowania pliku PDF zawierającego dane pracowników:

using DemoAutofixture;
using IronPdf;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class EmployeePdfGenerator
{
    private readonly Fixture _fixture;

    public EmployeePdfGenerator()
    {
        _fixture = new Fixture();
    }

    public List<Employee> GenerateEmployees(int count)
    {
        return _fixture.CreateMany<Employee>(count).ToList();
    }

    public void GeneratePdf(List<Employee> employees, string filePath)
    {
        IronPdf.License.LicenseKey = "Your-License-Key-Here";
        var renderer = new ChromePdfRenderer();
        string htmlContent = GenerateHtml(employees);

        try
        {
            renderer.RenderHtmlAsPdf(htmlContent).SaveAs(filePath);
            Console.WriteLine("PDF Created Successfully!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error generating PDF: {ex.Message}");
        }
    }

    private string GenerateHtml(List<Employee> employees)
    {
        StringBuilder htmlBuilder = new StringBuilder();
        htmlBuilder.Append("<!DOCTYPE html><html><head><title>Employee List</title></head><body><h1>Employee List</h1><ul>");

        foreach (var employee in employees)
        {
            htmlBuilder.Append($"<li>{employee.GetFullName()} - Age: {employee.Age}</li>");
        }

        htmlBuilder.Append("</ul></body></html>");
        return htmlBuilder.ToString();
    }
}

Aby użyć tej klasy, należy utworzyć instancję EmployeePdfGenerator, wygenerować listę pracowników, a następnie wywołać GeneratePdf:

List<Employee> employees = new()
{
    new Employee("John", "Smith", 32),
    new Employee("Emily", "Davis", 18),
    new Employee("David", "Brown", 24),
    new Employee("Jane", "Doe", 16),
    new Employee("Michael", "Johnson", 49),
};

EmployeePdfGenerator pdfGenerator = new();
pdfGenerator.GeneratePdf(employees, "EmployeeList.pdf");

AutoFixture C# (Jak to działa dla deweloperów): Rysunek 4 - Autofixture z IronPDF

Opis kodu

Podany kod w języku C# wykorzystuje bibliotekę IronPDF do wygenerowania dokumentu PDF zawierającego listę pracowników wraz z ich wiekiem. Definiuje klasę EmployeePdfGenerator, która zawiera metodę GeneratePdf przyjmującą listę obiektów Employee i ścieżkę do pliku. Wewnętrznie konstruuje zawartość HTML za pomocą metody GenerateHtml, a następnie używa klasy HtmlToPdf IronPDF do renderowania tego HTML jako PDF, zapisanego w określonej lokalizacji pliku. Ulepszenia obejmują użycie StringBuilder do generowania HTML i dodanie podstawowego zarządzania błędami do generowania PDF i zapisu plików.

Pisanie metody testowej

W poniższym ustawieniu AutoFixture jest używany do tworzenia instancji klasy Employee, umożliwiając generowanie zrandomizowanych danych do testów. IronPDF służy do płynnej konwersji treści HTML, w tym informacji o pracownikach, do formatu PDF. Klasa EmployeePdfGenerator organizuje te procesy, efektywnie zarządzając zarówno generowaniem danych, jak i konwersją do PDF. Tymczasem klasa testowa XUnit EmployeePdfGeneratorTests zapewnia prawidłowe działanie generowania PDF poprzez rygorystyczne testy. To zintegrowane podejście upraszcza generowanie i dokumentówanie danych pracowników, zapewniając solidność i niezawodność procesu tworzenia plików PDF.

using System.IO;
using Xunit;

public class EmployeePdfGeneratorTests
{
    [Fact]
    public void GeneratePdf_GeneratesPdfFile()
    {
        // Arrange
        var generator = new EmployeePdfGenerator();
        var employees = generator.GenerateEmployees(5);
        string filePath = "EmployeeList.pdf";

        // Act
        generator.GeneratePdf(employees, filePath);

        // Assert
        Assert.True(File.Exists(filePath));
    }
}

Tutaj klasa EmployeePdfGeneratorTests zawiera przypadek testowy, który weryfikuje utworzenie pliku PDF w określonej ścieżce, zapewniając, że metoda GeneratePdf działa poprawnie.

AutoFixture C# (Jak to działa dla deweloperów): Rysunek 5 - AutoFixture C#

Wnioski

AutoFixture upraszcza fazę "Arrange" podczas pisania testów jednostkowych w .NET, oferując programistom możliwość skupienia się na przypadkach testowych, a nie na zawiłościach konfiguracji. Usprawnia proces testowania jednostkowego, zapewniając zróżnicowane i realistyczne dane wejściowe poprzez automatyczne generowanie danych testowych. W połączeniu z informacjami o licencjonowaniu IronPDF stanowi to potężne połączenie zapewniające ciągłość użytkowania i wsparcia.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta