سرمایه گذاری متفاوت در سال نو 🍎🌱 ۳۵٪ تخفیف نوروزی ➕ حضور رایگان در مسترمایند نخبگان صنعت نرم‌افزار 💻✅
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ امیرحسین شکری
ایزوله بودن تست ها
مهرداد سامی حل شده توسط مهرداد سامی

عرض سلام و احترام.

من توی درک این مفهوم یه مقدار گیج شدم. استاد فرمودن تست‌ها ایزوله هستند. اما توی این مثال:

class AnnotationTest extends TestCase{
    private $value;
    public function testCorrectValue() {
        $this->value++;
        $this->assertEquals(1,$this->value);
    }
    /**
     * @before
     */
    public function testBefore() {
        $this->value = 5;
        $this->assertTrue($this->value > 0);
    }

وقتی testBefore اجرا میشه مقدار value در testCorrectValue برابر ۶ میشه و طبیعتا تست fail میشه. در حالی که طبق تعریف، مقدار value باید null می‌بود. 

ممنون میشم راهنماییم کنید.

سلام و احترام

درنظر داشته باشید که هر متد تستی که اجرا میشه مقادیر تمامی پراپرتی‌ها خالی میشه. ینی اینکه وقتی متد testBefore اجرا میشه مقدار 5 هستش و وقتی متد testCorrectValue اجرا میشه مقدار 1 هستش و هر بار داخل همون متد مقدار جدید میگیره.

امیر صالحی ۰۷ آذر ۱۳۹۹، ۱۹:۳۱

سلام وقت شما بخیر .. 

 

همونطور که داخل ویدیو‌ها هم گفته شده زمان اجرای تست همه پراپرتی‌ها خالی میشن و تست‌ها اجرا میشن .. و زمانی که از @before استفاده میکنید در واقع برای هر تست دارید ۲ متد رو اجرا میکنید .. اول @before اجرا میشه و بعدش متد اصلی . در اینجا هم به همین صورت خواهد بود زمانی که تست شما اجرا میشه مقدار پراپرتی برابر با null قرار میگیره و ابتدا @before اجرا میشه و مقدار پراپرتی رو برابر با 5 قرار میده و بعد از اون تست اصلی اجرا خواهد شد و مقدار قبلی که ۵ بود رو تبدیل به ۶ میکنه ... در واقع باید این نکته رو در نظر داشته باشید که زمانی که شما از @before استفاده میکنید ایزوله بودن بین این ۲ تست اتفاق نمیوفته .. یعنی در واقع هر وضعیتی رو @before ایجاد میکنه تست اصلی هم همون وضعیت رو ادامه میده. 

بهترین پاسخ
مهرداد سامی ۰۷ آذر ۱۳۹۹، ۱۹:۴۸