برنامه نویسی

TDD و مسخره – جامعه dev

در آخرین پست ما در مورد اصول اصلی آزمایش واحد و TDD بحث کرده ایم. در این پست ، ما یک مثال ساده از نحوه استفاده را طی خواهیم کرد موق به عنوان چارچوب مسخره و تزریق وابستگی با راهبه در زمینه توسعه آزمایش محور (TDD) در C#. این ترکیب با تمسخر وابستگی ها و تمرکز بر رفتار سیستم تحت آزمایش ، آزمایش های تمیز و قابل حفظ را امکان پذیر می کند.

تصور کنید که ما یک برنامه داریم که پرداخت ها را از طریق a پردازش می کنیم PaymentServiceبشر این سرویس به یک خارجی بستگی دارد IPaymentGateway رابط برای پرداخت واقعی.

بیایید این مرحله به مرحله را کنار بگذاریم.

مرحله 1: ابتدا آزمون را بنویسید (قبل از کد)

ما می خواهیم آزمایش کنیم PaymentService، که بستگی به آن دارد IPaymentGatewayبشر اولین آزمون ما بر اطمینان از اطمینان خواهد بود PaymentService هنگام انجام پرداخت معتبر ، به درستی رفتار می کند.

در اینجا کد آزمون وجود دارد:

using Moq;
using NUnit.Framework;

[TestFixture]
public class PaymentServiceTests
{
    private Mock<IPaymentGateway> _mockPaymentGateway;
    private PaymentService _paymentService;

    [SetUp]
    public void Setup()
    {
        // Create the mock object
        _mockPaymentGateway = new Mock<IPaymentGateway>();

        // Inject the mock into the PaymentService
        _paymentService = new PaymentService(_mockPaymentGateway.Object);
    }

    [Test]
    public void MakePayment_WhenAmountIsValid_ShouldReturnTrue()
    {
        // Arrange
        var amount = 100m; // Valid amount
        _mockPaymentGateway.Setup(gateway => gateway.ProcessPayment(amount)).Returns(true);

        // Act
        var result = _paymentService.MakePayment(amount);

        // Assert
        Assert.IsTrue(result);
    }
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مرحله 2: آزمون را اجرا کنید (شکست خواهد خورد)

از آنجا که ما اجرا نکرده ایم PaymentService یا IPaymentGateway با این حال ، اجرای آزمون منجر به خرابی خواهد شد. پیام خطا نشان می دهد که PaymentService وت IPaymentGateway هنوز وجود ندارد

اکنون باید حداقل کد را پیاده سازی کنیم تا این آزمون بگذرد.

مرحله 3: کد را برای گذراندن آزمون بنویسید

ما باید ایجاد کنیم PaymentService وت IPaymentGateway رابط به گونه ای که آزمون بتواند با موفقیت اجرا شود.

در اینجا اجرای IPaymentGateway رابط و PaymentService کلاس:

public interface IPaymentGateway
{
    bool ProcessPayment(decimal amount);
}public class PaymentService
{
    private readonly IPaymentGateway _paymentGateway;

    public PaymentService(IPaymentGateway paymentGateway)
    {
        _paymentGateway = paymentGateway;
    }

    public bool MakePayment(decimal amount)
    {
        // Business logic for validating amount (e.g., check if it's positive)
        if (amount <= 0)
        {
            return false;
        }

        // Process the payment through the gateway
        return _paymentGateway.ProcessPayment(amount);
    }
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مرحله 4: آزمون را دوباره اجرا کنید (باید بگذرد)

اکنون که ما اجرا کرده ایم PaymentService وت IPaymentGateway، ما می توانیم دوباره آزمون را اجرا کنیم.

اگر همه چیز به درستی تنظیم شده باشد ، این بار باید آزمون بگذرد. خروجی باید نشان دهد که MakePayment روش PaymentService همانطور که انتظار می رود ، بازگردد true هنگامی که یک مقدار معتبر منتقل می شود و دروازه باز می گردد trueبشر

مرحله 5: یک آزمون دیگر بنویسید (رویکرد آزمون رشد)

مرحله بعدی در TDD نوشتن تست دیگری برای سناریوی متفاوت است. در این حالت ، هنگامی که مبلغ پرداخت نامعتبر منتقل می شود (به عنوان مثال ، مبلغ منفی یا صفر) آزمایش خواهیم کرد. بیایید این آزمون را بنویسیم.

در اینجا آزمون بعدی است:

[Test]
public void MakePayment_WhenAmountIsInvalid_ShouldReturnFalse()
{
    // Arrange
    var amount = -50m; // Invalid amount
    _mockPaymentGateway.Setup(gateway => gateway.ProcessPayment(It.IsAny<decimal>())).Returns(false);

    // Act
    var result = _paymentService.MakePayment(amount);

    // Assert
    Assert.IsFalse(result);
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مرحله ششم: در صورت لزوم کد را اصلاح کنید

اکنون ، ما یک آزمایش برای مورد نامعتبر داریم و در صورت لزوم باید هرگونه منطق اضافی را اجرا کنیم تا این آزمایش بگذرد. در کد فعلی ما ، منطق از قبل برمی گردد false اگر مقدار کمتر از یا مساوی باشد 0بشر این بدان معنی است که کد در حال حاضر صحیح است ، و ما نیازی به تغییر چیزی نداریم.

پایان

این مثال نحوه استفاده از توسعه آزمایش محور در C# را با NUNIT ، MOQ و تزریق وابستگی نشان می دهد. با تمسخر وابستگی ها ، می توانید به راحتی رفتار خدمات خود را بدون تکیه بر پیاده سازی های واقعی آزمایش کنید و آزمایشات خود را سریعتر و قابل اطمینان تر کنید. تزریق وابستگی تضمین می کند که وابستگی ها به راحتی قابل تعویض هستند و کد تمیز و قابل حفظ را ترویج می کنند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا