CodeShot

الگوی AAA (Arrange-Act-Assert) در مقابل الگوی Given-When-Then (BDD)

الگوی AAA یک تست واحد را به سه بخش آماده‌سازی، اجرا و بررسی نتیجه تقسیم می‌کند و زبان فنی و مستقیم دارد؛ الگوی Given-When-Then از دنیای BDD می‌آید، ساختار مشابهی دارد اما با زبانی نزدیک‌تر به توصیف رفتار کسب‌وکار نوشته می‌شود و اغلب در ابزارهایی مثل SpecFlow به‌کار می‌رود.

ویژگیالگوی AAA (Arrange-Act-Assert)الگوی Given-When-Then (BDD)
مخاطب اصلیتوسعه‌دهندگانکسب‌وکار و توسعه‌دهندگان
زبانفنینزدیک به زبان طبیعی
ابزار رایجxUnit، NUnitSpecFlow، Cucumber

کِی از الگوی AAA (Arrange-Act-Assert) استفاده کنیم؟

وقتی تست واحد فنی و مستقیم برای توسعه‌دهندگان می‌نویسید و نیازی به خوانایی برای افراد غیرفنی نیست.

کِی از الگوی Given-When-Then (BDD) استفاده کنیم؟

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

مثال الگوی AAA (Arrange-Act-Assert)

[Fact]
public void Add_TwoNumbers_ReturnsSum()
{
    // Arrange
    var calc = new Calculator();
    // Act
    var result = calc.Add(2, 3);
    // Assert
    Assert.Equal(5, result);
}

مثال الگوی Given-When-Then (BDD)

Scenario: جمع دو عدد
  Given یک ماشین‌حساب دارم
  When عدد ۲ و ۳ را جمع می‌کنم
  Then نتیجه باید ۵ باشد

اشتباه رایج

اشتباه رایج ترکیب چند Act یا چند Assert نامرتبط در یک تست AAA است که باعث می‌شود دلیل شکست تست مبهم شود؛ هر تست باید دقیقاً یک رفتار مشخص را Arrange-Act-Assert کند.

جمع‌بندی

برای تست‌های فنی معمولی توسعه‌دهندگان از AAA و برای مستندسازی رفتار قابل‌فهم برای ذی‌نفعان غیرفنی از Given-When-Then استفاده کنید.