
AutoFixture C# (Geliştiriciler İçin Nasıl Çalışır)
AutoFixture, birim testi yazımının 'Düzenleme' aşamasını en aza indirgemeyi hedefleyerek test yönetimini geliştiren, açık kaynaklı bir .NET kütüphanesidir. Ana amacı, test ettiğiniz unsur üzerine odaklanmanızı sağlamak, kurulum sürecinden ziyade, test verileriyle nesne grafikleri oluşturmanızı sağlamaktır. Bu makale, AutoFixture'ın verimli test veri jenerasyonu yoluyla test odaklı geliştirmeyi nasıl kolaylaştırabileceğini incelemektedir.
AutoFixture, birim testleri için test verileri oluşturma sürecini düzene sokmak üzere tasarlanmış güçlü bir C# kütüphanesidir. Geliştiricilere, test senaryoları için otomatik olarak veri oluşturarak tekrar eden kurulum kodları yazmaktan kaçınmalarına yardımcı olur. Birim testlerde, AutoFixture, her bir birim testinin çeşitli ve gerçekçi girdilerle yürütüldüğünü garanti ederek veri oluşturma sürecini düzene sokar. AutoFixture, test verilerini otomatik olarak üreterek C# dilinde test yapmayı daha verimli hale getirir ve elle kurulum gereksinimini azaltır.

AutoFixture Yükleme ve Kurulumu
AutoFixture, bir NuGet paketi olarak sunulur ve NuGet Package Manager Konsolu veya Visual Studio'nun NuGet Package Manager UI'si içindeki .NET paket ekleme aracı kullanılarak yüklenebilir.
NuGet, AutoFixture'ın en son sürümünü ve bunun bağımlılıklarını projenize indirip kuracaktır.
Bir Sınıf İçin Test Veri Oluşturma Örneği
Basit bir çalışan sınıfımızın FirstName, LastName ve Age gibi özellikleri olduğunu varsayalım. Birim testlerimizde bu sınıfın örneklerini elle oluşturmak yerine, bizim için rastgele veri oluşturması amacıyla AutoFixture'dan faydalanabiliriz.
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}";
}Public Class Employee
Public Property FirstName() As String
Public Property LastName() As String
Public Property Age() As Integer
Public Sub New(ByVal firstName As String, ByVal lastName As String, ByVal age As Integer)
Me.FirstName = firstName
Me.LastName = lastName
Me.Age = age
End Sub
Public Function GetFullName() As String
Return $"{FirstName} {LastName}"
End Function
End ClassKod Açıklaması
Employee sınıfı, bir çalışanın ad, soyadı ve yaş gibi temel detaylarını FirstName, LastName ve Age özellikleri ile kapsar. Yapıcı yöntemi, bu detayları parametre olarak kabul ederek ve ilgili özelliklere atayarak bir çalışan nesnesinin oluşturulmasını kolaylaştırır. Ayrıca, GetFullName metodu çalışanın ad ve soyadını birleştirir, tam adı bir dize olarak döndürür.
Test Senaryomuz İçin Kodu Ayarlama
Bir sonraki adımda, Employee sınıfını test etmek için bir test sınıfı oluşturacağız:
using AutoFixture;
public class EmployeeTests
{
private readonly IFixture _fixture;
public EmployeeTests()
{
// Using AutoFixture's Fixture to create test data
_fixture = new Fixture();
}
}Imports AutoFixture
Public Class EmployeeTests
Private ReadOnly _fixture As IFixture
Public Sub New()
' Using AutoFixture's Fixture to create test data
_fixture = New Fixture()
End Sub
End ClassKod Açıklaması
Bu kod örneği, Employee sınıfı için birim testlerine AutoFixture'ı entegre eder. AutoFixture ad alanını dahil ederek, geliştiriciler veri üretimi işlevine erişir. _fixture alanı, yeni bir Fixture örneği ile başlatılarak, test verisi oluşturmayı kolaylaştırır. Bu düzen, kapsamlı Employee sınıfı için test verimliliğini ve güvenilirliğini artırır.
Örnek 1: Çalışan Test Durumu Nesne Değerlerini Doğrulama
[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);
}<Fact>
Public Sub Employee_ShouldHaveValidValues()
' Arrange
Dim firstName = _fixture.Create(Of String)()
Dim lastName = _fixture.Create(Of String)()
Dim age = _fixture.Create(Of Integer)()
' Act
Dim employee As New Employee(firstName, lastName, age)
' Assert
Assert.Equal(firstName, employee.FirstName)
Assert.Equal(lastName, employee.LastName)
Assert.Equal(age, employee.Age)
End SubKod Açıklaması
Test metodu Employee_ShouldHaveValidValues, Employee sınıfının özelliklerini sağlanan değerlerle doğru bir şekilde başlattığını doğrular. FirstName, LastName ve Age için rastgele veri oluşturmak üzere bir test fikstürü kullanarak, test bir Employee örneği oluşturur. Daha sonra, FirstName, LastName ve Age özelliklerinin Employee nesnesinin oluşturulan değerlere uyup uymadığını ve yapıcının bu özellikleri doğru bir şekilde ayarlayıp ayarlamadığını kontrol eder.
Örnek 2: Yapıcı Çağrıldığında Çalışanı Doğrulama
[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);
}<Fact>
Public Sub CreateEmployee_ValidData_ReturnsEmployeeObject()
' Arrange
Dim employee = _fixture.Create(Of Employee)()
' Act
' Assert
Assert.NotNull(employee)
Assert.False(String.IsNullOrEmpty(employee.FirstName))
Assert.NotNull(employee.LastName)
Assert.True(employee.Age > 0)
End SubKod Açıklaması
Bu test metodu, bir Employee nesnesinin özelliklerinin rastgele üretilen değerlerle eşleşip eşleşmediğini doğrulamak için test iddialarını içerir. string türü özellikleri FirstName ve LastName ile int Age'nın düzgün ayarlanıp ayarlanmadığını ve geçerli olup olmadığını doğrular. Herhangi bir başarısız iddia, çalışan ayrıntıları için beklenen ve rastgele oluşturulan değerler arasındaki uyumsuzluğu gösterir.

IronPDF Tanıtımı
IronPDF C# PDF Kütüphanesi, PDF metnini okumayı ve HTML kullanarak PDF belgeleri oluşturmayı kolaylaştıran, Iron Software tarafından geliştirilen sağlam bir C# PDF kütüphanesidir. Bu çok yönlü araç, stil bilgileriyle tamamlanan kolay biçimlendirilebilir belgeleri yüksek kaliteli PDF'lere dönüştürmeye olanak tanır. IronPDF ile, HTML içeriğini URL'lerden çekmek ve iyi yapılandırılmış PDF dosyalarına dönüştürmek, HTML'den PDF oluşturmanın sorunsuz bir sürecidir. Bu yetenek, web içeriğinden doğrudan profesyonel PDF belgeleri oluşturmayı otomatikleştirmek ve düzene sokmak isteyen geliştiriciler için IronPDF'ü vazgeçilmez bir araç haline getirir.

Installing IronPDF
NuGet Package Manager konsolunu açın ve şu komutu çalıştırın:
IronPDF ile AutoFixture'ın özelliklerini kullanarak Kod Örneği
Aşağıda, AutoFixture ve IronPDF'ü birlikte kullanarak çalışan verisinin PDF'sini üretmeyi gösteren bir örnek bulunmaktadır:
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();
}
}Imports DemoAutofixture
Imports IronPdf
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Public Class EmployeePdfGenerator
Private ReadOnly _fixture As Fixture
Public Sub New()
_fixture = New Fixture()
End Sub
Public Function GenerateEmployees(ByVal count As Integer) As List(Of Employee)
Return _fixture.CreateMany(Of Employee)(count).ToList()
End Function
Public Sub GeneratePdf(ByVal employees As List(Of Employee), ByVal filePath As String)
IronPdf.License.LicenseKey = "Your-License-Key-Here"
Dim renderer = New ChromePdfRenderer()
Dim htmlContent As String = GenerateHtml(employees)
Try
renderer.RenderHtmlAsPdf(htmlContent).SaveAs(filePath)
Console.WriteLine("PDF Created Successfully!")
Catch ex As Exception
Console.WriteLine($"Error generating PDF: {ex.Message}")
End Try
End Sub
Private Function GenerateHtml(ByVal employees As List(Of Employee)) As String
Dim htmlBuilder As New StringBuilder()
htmlBuilder.Append("<!DOCTYPE html><html><head><title>Employee List</title></head><body><h1>Employee List</h1><ul>")
For Each employee In employees
htmlBuilder.Append($"<li>{employee.GetFullName()} - Age: {employee.Age}</li>")
Next employee
htmlBuilder.Append("</ul></body></html>")
Return htmlBuilder.ToString()
End Function
End ClassBu sınıfı kullanmak için EmployeePdfGenerator örneğini oluşturur, bir çalışan listesi oluşturur ve ardından GeneratePdf çağırırsınız:
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");Dim employees As New List(Of Employee)() From {
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)
}
Dim pdfGenerator As New EmployeePdfGenerator()
pdfGenerator.GeneratePdf(employees, "EmployeeList.pdf")
Kod Açıklaması
Verilen C# kodu, çalışanların ve yaşlarının listelendiği bir PDF belgesi oluşturmak için IronPDF kütüphanesini kullanır. Bu, GeneratePdf yöntemini içeren EmployeePdfGenerator sınıfını tanımlar ve bu yöntem, Employee nesneleri ve bir dosya yolunu alır. Dahili olarak, HTML içeriğini GenerateHtml yöntemi ile oluşturur ve ardından bu HTML'yi PDF olarak işlemek için IronPDF'nin HtmlToPdf sınıfını kullanır, belirtilen dosya yolunda kaydedilir. Geliştirmeler, HTML üretimi için StringBuilder kullanmayı ve PDF üretimi ile dosya kaydı için temel hata ayıklamayı içerir.
Test Yöntemini Yazma
Aşağıdaki kurulumda, AutoFixture, Employee sınıfının örneklerini oluşturmak ve test için rastgele veri üretmeyi sağlamak için kullanılır. IronPDF, çalışan bilgileri de dahil olmak üzere HTML içeriğini PDF biçimine sorunsuzca dönüştürmek için kullanılır. EmployeePdfGenerator sınıfı bu işlemleri düzenler, hem veri üretimini hem de PDF dönüştürmesini verimli bir şekilde yönetir. Bu arada, EmployeePdfGeneratorTests XUnit test sınıfı PDF üretiminin düzgün çalışmasını kapsamlı testlerle güvence altına alır. Bu entegre yaklaşım, çalışan verilerinin oluşturulmasını ve dokümantasyonunu basitleştirir, PDF oluşturma sürecinde sağlamlık ve güvenilirlik sağlar.
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));
}
}Imports System.IO
Imports Xunit
Public Class EmployeePdfGeneratorTests
<Fact>
Public Sub GeneratePdf_GeneratesPdfFile()
' Arrange
Dim generator = New EmployeePdfGenerator()
Dim employees = generator.GenerateEmployees(5)
Dim filePath As String = "EmployeeList.pdf"
' Act
generator.GeneratePdf(employees, filePath)
' Assert
Assert.True(File.Exists(filePath))
End Sub
End ClassEmployeePdfGeneratorTests sınıfı burada belirtilen dosya yolunda bir PDF dosyası oluşturulmasını doğrulayan bir test vakası içerir, GeneratePdf yönteminin doğru çalışmasını garanti eder.

Sonuç
AutoFixture, .NET'te birim testleri yazmanın 'Düzenleme' aşamasını basitleştirir, geliştiricilere kurulum ayrıntılarından ziyade test vakalarına odaklanma imkanı sunar. Birim test sürecini, çeşitli ve gerçekçi girdileri garanti ederek test verilerini otomatik olarak oluşturarak düzene sokar. IronPDF Lisans Bilgileri ile birlikte, sürekli kullanım ve destek için güçlü bir kombinasyon sağlar.

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ve NASA, Tesla ve dünya genelindeki devlet kurumlarına hizmet etmektedir.
İlgili Makaleler


