shayan hoseini
shayan hoseini
خواندن ۱ دقیقه·۵ سال پیش

چطور مقدار رندوم رو تست کنیم؟

فرض کنید میخواهیم برای متدی تست بنویسیم که یک توکن از رشته ای ۶۰ کاراکتری را بصورت رندوم تولید میکند. عملکرد این تابع به این صورت خواهد بود:

function random_string($length) { $key = ''; $keys = array_merge(range(0, 9), range('a', 'z')); for ($i = 0; $i < $length; $i++) { $key .= $keys[array_rand($keys)]; } return $key; }

حالا میخواهیم تستی بنویسیم که بعد از ساختن کاربر، مقدار توکن را تست کنیم تا مطمئن شویم از این متد استفاده میکند:

$this->assertEquals('c6iZq87cWhZzV0AJK0XlVqYxCIPFkBoh', $user->token);

برای این کار متدی استاتیک از کلاس توکن میسازیم:

<?php class Token { public static function random_string($length) { $key = ' '; $keys = array_merge(range(0, 9), range('a', 'z')); for ($i = 0; $i < $length; $i++) { $key .= $keys[array_rand($keys)]; } return $key; } }

حالا باید متدی داشته باشیم تا بتوانیم در محیط تست رشته ای رندوم را شبیه سازی و به آن اینجکت کنیم. یعنی درتست به این متد بگوییم هرگاه صدا زده شدی مقدار مشخصی را برگردان تا بتوانیم همان را انتظار داشته باشیم:

Token::setTest('c6iZq87cWhZzV0AJK0XlVqYxCIPFkBoh') $user = User::create(); $this->assertEquals('c6iZq87cWhZzV0AJK0XlVqYxCIPFkBoh', $user->token);

خب حالا کافیه کلاس Token را به اینصورت تکمیل کنیم:

<?php class Token { static $testToken =null; public static function generate(){ return static::$testToken ?:static::random_string(32); } public static function setTest($string){ static::$testToken = $string; } public static function random_string($length) { $key = ''; $keys = array_merge(range(0, 9), range('a', 'z')); for ($i = 0; $i < $length; $i++) { $key .= $keys[array_rand($keys)]; } return $key; } }

 متد generate دو کار انجام میدهد:

  1. رشته ای رندوم تولید میکند.
  2. اگر مقداری به عنوان ورودی داشت همان را برمیگرداند.

پکیج Carbon در php از این روش برای اینجکت کردن زمان مورد انتطار استفاده میکند:

$knownDate = Carbon::create(2001, 5, 21, 12); Carbon::setTestNow($knownDate);
برنامه نویسیphpتستunittestمهندسی نرم افزار
back-end developer
شاید از این پست‌ها خوشتان بیاید