IRONSOFTWAREHOME
GELIŞTIRICI GÜNCELLEMELERI

Moq C# (Geliştiriciler için Nasıl Çalışır)

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Jacob Mellor
Updated: 5 Temmuz 2026

Yazılım geliştirme dünyasında test etmek vazgeçilmez bir süreçtir. Kodunuzun beklendiği gibi çalıştığını ve hataların üretime ulaşmadan önce yakalanmasını sağlar. Test etmenin önemli bir yönü mocking (taklit) olup, C# testleri söz konusu olduğunda MOQ, bir geliştiricinin silahında güçlü bir araçtır. Lambda ifadeleri için destek sağlar. MOQ, kısaltması "Mock Object Framework .NET için," birim testleri için sahte nesneler oluşturma sürecini basitleştirir. Bu makalede, C#'ta MOQ'u inceleyeceğiz.

MOQ Nedir?

MOQ - Mocking Framework .NET için, geliştiricilerin sahte nesneleri hızlı ve verimli bir şekilde oluşturmasına olanak tanıyan bir .NET uygulamaları için mocking çerçevesidir. Sahte nesneler, uygulamanızdaki gerçek nesnelerin davranışını taklit eder, bu da belirli kod parçalarını izole edip test etmeyi kolaylaştırır. MOQ, bu sahte nesneleri oluşturma ve çalışma sürecini basitleştirir.

MOQ'nun Ana Özellikleri

  • Akıcı Arayüz: MOQ, beklentileri ve doğrulamaları ayarlamak için akıcı ve ifade edici bir API sağlar. Bu, test kodunuzu daha okunabilir ve anlaşılır hale getirir.
  • Güçlü Tip Tanımlama: MOQ, C# dil özelliklerini kullanarak sahte nesneleri ve beklentileri tanımlar. Bu, testlerinizdeki çalışma zamanı hatalarının olasılığını azaltır.
  • Gevşek Mocking: MOQ, hem sıkı hem de gevşek mocking'i destekler. Gevşek mocking, herhangi bir yöntem çağrısına yanıt veren sahte nesneler oluşturmanıza olanak tanırken, sıkı mocking yalnızca beklenen yöntemlerin çağrılmasını sağlar.
  • Doğrulanabilir Davranış: MOQ, sahte nesnelerinizde belirli yöntemlerin beklenen argümanlarla ve doğru sırayla çağrıldığını doğrulamanıza olanak tanır.
  • Geri Çağırmalar ve Dönüşler: Bir sahte metod çağrıldığında özel kod çalıştırmak ve sahte yöntemler için dönüş değerlerini belirtmek için geri çağırmalar tanımlayabilirsiniz.

MOQ ile Başlarken

Bu eğitimde, birim testlerini kolaylaştırmak için C# için popüler bir mocking çerçevesi olan MOQ'un nasıl kullanılacağını keşfedeceğiz. MOQ kullanarak bağımlılıkları taklit etmek için basit bir ATM işlem senaryosu oluşturup test edeceğimiz bir örnek inceleyeceğiz.

Yeni bir C# Projesi Oluşturun

Yeni bir proje oluşturmak için aşağıdaki adımları izleyin:

  1. Visual Studio açın, "Dosya" > "Yeni" > "Proje..." gidin.
  2. Bir proje şablonu seçin, ayarları yapılandırın ve "Oluştur" üzerine tıklayın.

Moq C# (Geliştiriciler İçin Nasıl Çalışır) Şekil 1 - Visual Studio 2022'de yeni bir konsol uygulaması oluşturun

Diyelim ki bir ATM (Otomatik Vezne Makinası) için yazılım geliştiriyorsunuz ve kimlik doğrulama ve para çekme işlevselliğini test etmeniz gerekiyor. ATM, iki arayüze bağlıdır: IHostBank ve IHSMModule. ATM'nin nakit çekme işlevselliğini temsil eden ATMCashWithdrawal sınıfını test etmek istiyoruz.

ATM sisteminin bağımlılıklarını temsil eden iki arayüz oluşturun, IHostBank ve IHSMModule. AuthenticateAmount ve ValidatePIN gibi ilgili yöntemleri tanımlayın.

// IHostBank.cs
public interface IHostBank
{
    bool AuthenticateAmount(string accountNumber, int amount);
}

// IHSMModule.cs
public interface IHSMModule
{
    bool ValidatePIN(string cardNumber, int pin);
}

ATM işlemlerini gerçekleştirmek için yukarıda belirtilen bağımlılıkları kullanan ATMCashWithdrawal sınıfını oluşturun. Bu sınıfta, WithdrawAmount gibi belirli bir yöntemi uygulayacaksınız.

// ATMCashWithdrawal.cs
public class ATMCashWithdrawal
{
    private readonly IHSMModule hsmModule;
    private readonly IHostBank hostBank;

    public ATMCashWithdrawal(IHSMModule hsmModule, IHostBank hostBank)
    {
        this.hsmModule = hsmModule;
        this.hostBank = hostBank;
    }

    // Withdraw amount after validating PIN and balance
    public bool WithdrawAmount(string cardNumber, int pin, int amount)
    {
        if (!hsmModule.ValidatePIN(cardNumber, pin))
        {
            return false;
        }

        if (!hostBank.AuthenticateAmount(cardNumber, amount))
        {
            return false;
        }

        // Withdraw the specified amount and perform other operations
        return true;
    }
}

Bir Birim Test Projesi Oluşturun

Şimdi, bağımlılıkları taklit etmek için MOQ kullanarak ATMCashWithdrawal sınıfı için birim testler oluşturun.

Çözümünüze yeni bir Birim Test Projesi oluşturun ve adını ATMSystem.Tests olarak verin.

Visual Studio çözümünüze bir NUnit test projesi eklemek için şu adımları izleyin:

  1. Çözüme Sağ Tıklayın: Çözüm Gezgini'nde (genellikle sağ tarafta), çözüm adının üzerine sağ tıklayın.
  2. Ekle > Yeni Proje: Bağlam menüsünden "Ekle" ve ardından "Yeni Proje..." yi seçin.
  3. Yeni Bir Proje Oluşturun: "Yeni Proje Ekle" iletişim kutusunda, mevcut NUnit şablonlarını bulmak için "NUnit" arayabilirsiniz. Aşağıda gösterildiği gibi NUnit Test Projesi'ni seçin.

Moq C# (Geliştiriciler İçin Nasıl Çalışır) Şekil 2 - Çözümünüze yeni bir NUnit Test Projesi ekleyin.

  1. Projeyi Yapılandırın: Proje adını ve yerini de dahil olmak üzere ihtiyaç duyduğunuz şekilde proje ayarlarını yapılandırın.
  2. Tamam'a Tıklayın: NUnit test projesini çözümünüze eklemek için "Oluştur" veya "Tamam" düğmesine tıklayın.

Artık çözümünüz içinde bir NUnit test projeniz var ve bu projede birim testlerinizi yazabilir ve yönetebilirsiniz. Test etmek istediğiniz projelere referanslar ekleyebilir ve bu proje içinde NUnit test davalarınızı yazmaya başlayabilirsiniz.

Test projesinde MOQ'u kullanmaya başlamak için, çözümünüze MOQ NuGet paketini eklemeniz gerekecek. Visual Studio'daki NuGet Paket Yöneticisi'ni kullanarak veya Paket Yöneticisi Konsolu'nda aşağıdaki komutu çalıştırarak yapabilirsiniz:

Install-Package Moq
PowerShell

Bu komut paketi yükleyecek ve projeye tüm gerekli bağımlılıkları ekleyecektir.

NUnit ve MOQ kullanarak ATMCashWithdrawal sınıfının bağımlılıklarını (IHostBank ve IHSMModule) taklit etmek için birim testleri yazın.

using Moq;
using NUnit.Framework;

namespace ATMSystem.Tests
{
    public class ATMTests
    {
        private ATMCashWithdrawal atmCash;

        [SetUp]
        public void Setup()
        {
            // Arrange - Setup mock objects
            var hsmModuleMock = new Mock<IHSMModule>();
            hsmModuleMock.Setup(h => h.ValidatePIN("123456781234", 1234)).Returns(true);

            var hostBankMock = new Mock<IHostBank>();
            hostBankMock.Setup(h => h.AuthenticateAmount("123456781234", 500)).Returns(true);

            atmCash = new ATMCashWithdrawal(hsmModuleMock.Object, hostBankMock.Object);
        }

        [Test]
        public void WithdrawAmount_ValidTransaction_ReturnsTrue()
        {
            // Act - Execute the method under test
            bool result = atmCash.WithdrawAmount("123456781234", 1234, 500);

            // Assert - Verify the result
            Assert.IsTrue(result);
        }

        // More test cases for different scenarios (e.g., invalid PIN, insufficient funds)
    }
}

Bu test kodunda, MOQ kullanarak IHSMModule ve IHostBank için maket nesneler oluşturuyoruz ve test sırasında çağrıldıklarında nasıl davranacaklarını belirtiyoruz.

Yukarıdaki kod örneğinde, C#'ta MOQ kullanarak nesneleri sahtelemenin kavramını gösterdik. Birim testi sırasında davranışlarını simüle ederek IHSMModule ve IHostBank arayüzleri için maket nesneler oluşturuyoruz. Bu, maket nesnelerin tepkilerini kontrol ederek ATMCashWithdrawal sınıfını izole ve kapsamlı bir şekilde test etmemizi sağlar. Mocking (taklit) ile, kodumuzun bu bağımlılıklarla doğru bir şekilde etkileşimde bulunduğunu ve testlerimizin odaklanmış, tahmin edilebilir ve belirli kod birimi içinde ortaya çıkabilecek sorunları etkili bir şekilde tespit ettiğini sağlayabiliriz. Bu uygulama, genel güvenilirliği, sürdürülebilirliği ve test kodu kalitesini artırır.

3. Adım Testleri Çalıştırma

  1. Her şeyin güncel olduğundan emin olmak için çözümünüzü derleyin.
  2. Visual Studio'da Test Gezgini'ni açın (Test > Test Gezgini).
  3. Test Gezgini'nde, birim testlerinizi çalıştırmak için "Tümünü Çalıştır" düğmesine tıklayın.
  4. Test sonuçlarını gözden geçirin. Yazdığınız (WithdrawAmount_ValidTransaction_ReturnsTrue) testin geçtiğini görmelisiniz.

Moq C# (Geliştiriciler için Nasıl Çalışır) Şekil 3 - Testleri çalıştırmak için önce çözümü oluşturmalısınız. Başarılı bir derlemeden sonra, Visual Studio'da "Test Gezgini"ni açın ve birim testlerinizin çalıştırılmasını başlatmak için "Tümünü Çalıştır" düğmesine tıklayın.

Bu şekilde, test etmek istediğimiz kodu izole edebilir ve bağımlılıkları etkin bir şekilde sahteleyerek çeşitli senaryolar altında beklendiği gibi davrandığını garanti edebiliriz. Bu uygulama, yazılımınızın güvenilirliğini ve sürdürülebilirliğini artırır, geliştirme sürecinin erken aşamalarında sorunları tespit etmeyi ve düzeltmeyi kolaylaştırır.

IronPDF Tanıtımı

IronPDF Belgeleri ve Özellikler Genel Bakış, geliştiricilerin uygulamaları içinde PDF belgeleriyle çalışmasına olanak tanıyan güçlü bir C# kütüphanesidir. HTML, görüntüler ve mevcut PDF'ler gibi çeşitli kaynaklardan PDF dosyaları oluşturma, değiştirme ve dönüştürme gibi birçok özellik sunar. Önceki öğreticide tartışılan nesneleri sahteleme kavramıyla birleştirildiğinde, IronPDF, birim testlerinizde PDF belgeleri oluşturmak ve manipüle etmek için değerli bir araç olabilir.

IronPDF'nin ana özelliği, HTML'den PDF'ye Dönüştürme işlevi olup, yerleşimlerin ve stillerin sağlam kalmasını sağlar. Web içeriğini PDF'lere dönüştürür, bu da raporlar, faturalar ve belgeler için mükemmeldir. Bu özellik, HTML dosyalarını, URL'leri ve HTML dizilerini PDF'lere dönüştürmeyi destekler.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

Örneğin, bir projede PDF oluşturma veya işleme söz konusu olduğunda, gerçek dünya senaryolarını taklit eden sahte PDF belgeleri oluşturmak için IronPDF kullanabilirsiniz. Bu, özellikle kodunuzun PDF dosyalarıyla nasıl etkileşimde bulunduğunu test etmek ve doğrulamak için yararlı olabilir. Belirli içerikler, düzenler ve özelliklerle sahte PDF'ler oluşturabilir, ardından kodunuzun beklendiği gibi PDF çıktıları ürettiğinden veya PDF ile ilgili işlemleri doğru bir şekilde gerçekleştirdiğinden emin olmak için bunları test sabitleri olarak kullanabilirsiniz.

PDF'ler Oluşturmak için Sahte Nesneler Oluşturma

Diyelim ki finansal raporlar üreten bir uygulama geliştiriyorsunuz ve bu raporlar PDF belgeleri olarak kaydedilmeli ve dağıtılmalıdır. Bu senaryoda, PDF oluşturmayı test etmek ve içerik ve formatlamanın doğru olduğundan emin olmak isteyebilirsiniz.

Öncelikle, projemize IronPDF eklememiz gerekecek. IronPDF'yi yüklemek için NuGet Paket Yöneticisi Konsolu'na aşağıdaki komutu yazın.

PM > Install-Package IronPdf

Bu komut, projemize gerekli bağımlılıkları yükleyecek ve ekleyecektir.

IronPDF'nin birim test sürecine nasıl entegre edilebileceğini göreceksiniz:

Sahte PDF'ler Oluşturma

IronPDF'yi kullanarak, gerçek finansal raporları taklit etmek için belirli içerik ve stil ile sahte PDF belgeleri oluşturabilirsiniz. Bu sahte PDF'ler, aşağıdaki kod kesitinde gösterildiği gibi birim testleriniz için test sabitleri olarak hizmet edebilir:

public class PDFGenerator
{
    public void GenerateFinancialReport(string reportData)
    {
        var renderer = new ChromePdfRenderer();
        
        // Generate the report HTML
        string reportHtml = GenerateReportHtml(reportData);
        PdfDocument pdfDocument = renderer.RenderHtmlAsPdf(reportHtml);
        
        // Save the PDF to a file or memory stream
        pdfDocument.SaveAs("FinancialReport.pdf");
    }

    private string GenerateReportHtml(string reportData)
    {
        // Generate the report HTML based on the provided data
        // (e.g., using Razor views or any HTML templating mechanism)
        // Return the HTML as a string
        return "<h1>my Report</h1>";
    }
}

Sahte PDF'lerle Birim Testi

IronPDF kullanarak çeşitli rapor senaryolarını temsil eden sahte PDF'ler oluşturmak için testler yazacağız. Ardından, kodumuz tarafından üretilen gerçek PDF'leri bu sahte PDF'lerle karşılaştırarak içerik, format ve yapının beklendiği gibi olup olmadığını kontrol edeceğiz.

using IronPdf;
using NUnit.Framework;

internal class PDFGeneratorTests
{
    [Test]
    public void GenerateFinancialReport_CreatesCorrectPDF()
    {
        // Arrange
        var pdfGenerator = new PDFGenerator();
        var expectedPdf = PdfDocument.FromFile("ExpectedFinancialReport.pdf"); // Load a mock PDF

        // Act
        pdfGenerator.GenerateFinancialReport("Sample report data");
        var actualPdf = PdfDocument.FromFile("FinancialReport.pdf");

        // Assert
        Assert.AreEqual(actualPdf.ExtractAllText(), expectedPdf.ExtractAllText());
    }
}

Bu test kodunda, beklenen çıktıyı temsil eden maket bir PDF (expectedPdf) oluşturup, PDFGenerator tarafından üretilen PDF (actualPdf) ile karşılaştırıyoruz. Her iki PDF'nin de aynı içeriğe sahip olup olmadığını doğrulamak için içeriğini çıkardık.

Sonuç

Sonuç olarak, birim test süreçlerimize IronPDF ve MOQ dahil etmek, yazılım uygulamalarımızın davranışını kapsamlı bir şekilde doğrulamamıza olanak tanır. MOQ, belirli kod bileşenlerini izole etmemize, bağımlılıkları kontrol etmemize ve karmaşık senaryoları simüle etmemize imkan verir, böylece odaklanmış ve güvenilir testler yazmamızı sağlar.

Bu arada, IronPDF, PDF işlevselliğimizi kapsamlı bir şekilde inceleyerek PDF belgelerini üretmeyi ve manipüle etmeyi kolaylaştırarak test etme yeteneklerimizi geliştirir. Bu araçları test araç kutumuza entegre ederek, hem işlevsellik hem de performans taleplerini karşılayan sağlam ve yüksek kaliteli yazılımlar geliştirebiliriz. MOQ ile güçlü bir birim testi ve IronPDF ile PDF doğrulama kombinasyonu, uygulamaların genel kalitesine ve güvenilirliğine önemli ölçüde katkıda bulunur.

IronPDF'nin özelliklerini test etmek için ücretsiz bir deneme sunduğunu belirtmek önemlidir. İhtiyaçlarınıza uygun olduğunu düşünüyorsanız, IronPDF'nin özelliklerini lisanslı bir sürümle birlikte gelen tam avantaj ve destekle, uygulamalarınıza sorunsuz bir şekilde PDF ile ilgili işlevler entegre ederek projelerinizde kullanmaya devam etmenizi sağlayan bir ticari lisans satın alma seçeneğine sahipsiniz.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

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.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez