بررسی متد Exceptions::fake() در لاراول 11
خیلی از ما با لاراول و متدهای مختلفش آشنا هستیم و میدانیم که این فریمورک چه امکانات فوقالعادهای را در اختیار ما قرار میدهد. لاراول ۱۱ نیز یک سری تغییرات و بهبودهای جدید به همراه دارد که یکی از آنها کار با استثنائات (exceptions) است. متد Exceptions::fake()
به ما این امکان را میدهد که در حین تستهای خود، استثناها را شبیهسازی کنیم. این یکی از ویژگیهای بسیار مفید برای تیمهایی است که میخواهند مطمئن شوند کدشان به درستی رفتار میکند.
با استفاده از این متد، میتوانیم به راحتی بررسی کنیم که آیا استثنائی ایجاد میشود یا نه و همچنین میتوانیم در حین تستها، بررسی کنیم که آیا کدی که نوشتهایم به درستی عمل میکند. این کار به ما کمک میکند که از وقوع استثناهایی که ممکن است در زمان واقعی رخ دهند، مطمئن شویم. بنابر این، این متد به ما کمک میکند تا تستهای کارایی و استثناها را راحتتر و مؤثرتر انجام دهیم.
در ادامه، ما یک مثال عملی بررسی خواهیم کرد که چگونه میتوانیم از Exceptions::fake()
استفاده کنیم و در عین حال به شما کمک میکند که چگونگی پیادهسازی تستهای مربوط به استثناها را بهتر درک کنید. این مثال به ما نشان میدهد که چگونه میتوانیم با توجه به شرایط مختلف، استثناها را به طور مؤثر شبیهسازی کنیم و خروجیهای لازم را بررسی نماییم.
حالا میخواهیم یک کد ساده را بررسی کنیم که نحوه استفاده از این متد را نشان میدهد. پس بیایید با هم بعضی از قسمتهای کد را بررسی کنیم:
namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Support\Facades\Exceptions;
class ExampleTest extends TestCase
{
public function testExceptionFake()
{
Exceptions::fake(); // شروع به شبیهسازی استثناها
// فرض کنید یک متد داریم که ممکن است استثنایی ایجاد کند
$this->expectException(\Exception::class);
// این متد باید یک استثنا ایجاد کند
$this->doSomethingThatMayThrowException();
}
public function doSomethingThatMayThrowException()
{
throw new \Exception('این یک استثنا است!'); // شبیهسازی یک استثنا
}
}
?>
توضیحات کد
کد:
$this->expectException(\Exception::class);
این خط به ما میگوید که ما انتظار داریم یک استثنا از نوع
Exception
رخ دهد.کد:
Exceptions::fake();
این متد به ما اجازه میدهد که استثنائات را شبیهسازی کنیم، بنابراین هیچ استثنائی در حین اجرای این تست ایجاد نخواهد شد.
کد:
throw new \Exception('این یک استثنا است!');
ما به صورت نرمافزاری یک استثنا ایجاد میکنیم تا نشان دهیم در شرایط خاص، استثنا از متد ما صادر خواهد شد و آزمایش میشود.
کد:
public function doSomethingThatMayThrowException(){}
متد ما که به وضوح نشان میدهد هنگام فراخوانی، یک استثنا ایجاد میکند و در واقع جای آن استثنا را شبیهسازی میکنیم و بررسی میکنیم که آیا به درستی شبیهسازی شده است یا خیر.