ایزوله بودن تست ها

پرسیده شده
فعالیت 1245 روز پیش
دیده شده 412 بار
0

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

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

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 می‌بود. 

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

فایل پیوست

1
حذف شده

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

 

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

فایل پیوست

مهرداد سامی

توسط

مهرداد سامی

7 آذر 99

0
حذف شده

سلام و احترام

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

فایل پیوست

امیر صالحی

توسط

امیر صالحی

7 آذر 99

حذف شده
متوجه نشدم امیر جاان