عرض سلام و احترام.
من توی درک این مفهوم یه مقدار گیج شدم. استاد فرمودن تست ها ایزوله هستند. اما توی این مثال:
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 میبود.
ممنون میشم راهنماییم کنید.
سلام وقت شما بخیر ..
همونطور که داخل ویدیوها هم گفته شده زمان اجرای تست همه پراپرتیها خالی میشن و تستها اجرا میشن .. و زمانی که از @before استفاده میکنید در واقع برای هر تست دارید ۲ متد رو اجرا میکنید .. اول @before اجرا میشه و بعدش متد اصلی . در اینجا هم به همین صورت خواهد بود زمانی که تست شما اجرا میشه مقدار پراپرتی برابر با null قرار میگیره و ابتدا @before اجرا میشه و مقدار پراپرتی رو برابر با 5 قرار میده و بعد از اون تست اصلی اجرا خواهد شد و مقدار قبلی که ۵ بود رو تبدیل به ۶ میکنه ... در واقع باید این نکته رو در نظر داشته باشید که زمانی که شما از @before استفاده میکنید ایزوله بودن بین این ۲ تست اتفاق نمیوفته .. یعنی در واقع هر وضعیتی رو @before ایجاد میکنه تست اصلی هم همون وضعیت رو ادامه میده.
سلام و احترام
درنظر داشته باشید که هر متد تستی که اجرا میشه مقادیر تمامی پراپرتی ها خالی میشه. ینی اینکه وقتی متد testBefore اجرا میشه مقدار 5 هستش و وقتی متد testCorrectValue اجرا میشه مقدار 1 هستش و هر بار داخل همون متد مقدار جدید میگیره.