الگوی AAA (Arrange-Act-Assert) در مقابل الگوی Given-When-Then (BDD)
الگوی AAA یک تست واحد را به سه بخش آمادهسازی، اجرا و بررسی نتیجه تقسیم میکند و زبان فنی و مستقیم دارد؛ الگوی Given-When-Then از دنیای BDD میآید، ساختار مشابهی دارد اما با زبانی نزدیکتر به توصیف رفتار کسبوکار نوشته میشود و اغلب در ابزارهایی مثل SpecFlow بهکار میرود.
| ویژگی | الگوی AAA (Arrange-Act-Assert) | الگوی Given-When-Then (BDD) |
|---|---|---|
| مخاطب اصلی | توسعهدهندگان | کسبوکار و توسعهدهندگان |
| زبان | فنی | نزدیک به زبان طبیعی |
| ابزار رایج | xUnit، NUnit | SpecFlow، 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 استفاده کنید.
