প্রবন্ধ

PHPUnit এবং PEST ব্যবহার করে সহজ উদাহরণ সহ লারাভেলে কীভাবে পরীক্ষা করতে হয় তা শিখুন

যখন এটি স্বয়ংক্রিয় পরীক্ষা বা ইউনিট পরীক্ষার ক্ষেত্রে আসে, যে কোনও প্রোগ্রামিং ভাষায়, দুটি বিপরীত মতামত রয়েছে:

  • সময়ের অপচয়
  • আপনি এটা ছাড়া করতে পারবেন না

সুতরাং, এই নিবন্ধটির মাধ্যমে আমরা প্রাক্তনকে বোঝানোর চেষ্টা করব, বিশেষ করে লারাভেলে স্বয়ংক্রিয় পরীক্ষা শুরু করা কতটা সহজ তা প্রদর্শন করে।

প্রথমে আসুন "কেন" সম্পর্কে কথা বলি এবং তারপরে কিভাবে এর কিছু উদাহরণ দেখি।

কেন আমাদের স্বয়ংক্রিয় পরীক্ষার প্রয়োজন

স্বয়ংক্রিয় পরীক্ষাগুলি কোডের অংশগুলি চালায় এবং কোনও ত্রুটির রিপোর্ট করে৷ এটি তাদের বর্ণনা করার সবচেয়ে সহজ উপায়। একটি অ্যাপে একটি নতুন বৈশিষ্ট্য রোল আউট করার কল্পনা করুন, এবং তারপরে একজন ব্যক্তিগত রোবট সহকারী যাবেন এবং ম্যানুয়ালি নতুন বৈশিষ্ট্যটি পরীক্ষা করবেন, পাশাপাশি পরীক্ষা করবেন যে নতুন কোডটি পুরানো বৈশিষ্ট্যগুলির কোনওটি ভাঙেনি কিনা।

এটি প্রধান সুবিধা: সমস্ত বৈশিষ্ট্য স্বয়ংক্রিয়ভাবে পুনরায় পরীক্ষা করা। এটি অতিরিক্ত কাজের মতো মনে হতে পারে, কিন্তু আপনি যদি "রোবট" কে এটি করতে না বলেন তবে আমাদের বিকল্পভাবে এটি ম্যানুয়ালি করা উচিত, তাই না? 

অথবা নতুন বৈশিষ্ট্যগুলি কাজ করে কিনা তা পরীক্ষা না করেই প্রকাশ করা যেতে পারে, এই আশায় যে ব্যবহারকারীরা বাগ রিপোর্ট করবে।

স্বয়ংক্রিয় পরীক্ষা আমাদের বিভিন্ন সুবিধা দিতে পারে:

  • ম্যানুয়াল পরীক্ষার সময় বাঁচান;
  • তারা আপনাকে রিগ্রেশন এড়ানোর মাধ্যমে বাস্তবায়িত নতুন ফাংশন এবং একত্রিত ফাংশন উভয় ক্ষেত্রেই সময় বাঁচাতে দেয়;
  • সমস্ত নতুন বৈশিষ্ট্য এবং ইতিমধ্যে বাস্তবায়িত সমস্ত বৈশিষ্ট্য দ্বারা এই সুবিধা গুণ করুন;
  • আগের তিনটি পয়েন্ট প্রতিটি নতুন সংস্করণে প্রযোজ্য;
  • ...

এক বা দুই বছরের মধ্যে আপনার আবেদনটি কল্পনা করার চেষ্টা করুন, দলের নতুন বিকাশকারীদের সাথে যারা আগের বছরগুলিতে লেখা কোডটি জানেন না, বা কীভাবে এটি পরীক্ষা করবেন তাও জানেন না। 

আমাদের প্রথম স্বয়ংক্রিয় পরীক্ষা

প্রথম সম্পাদন করতে লারাভেলে স্বয়ংক্রিয় পরীক্ষা, আপনাকে কোন কোড লিখতে হবে না। হ্যাঁ, আপনি যে অধিকার পড়া। সবকিছু ইতিমধ্যে কনফিগার করা হয়েছে এবং প্রাক-ইনস্টলেশনে প্রস্তুত করা হয়েছেdefiলারাভেলের নাইটে, প্রথম মৌলিক উদাহরণ সহ।

আপনি একটি Laravel প্রকল্প ইনস্টল করার চেষ্টা করতে পারেন এবং অবিলম্বে প্রথম পরীক্ষা চালাতে পারেন:

laravel new project
cd project
php artisan test

এটি আপনার কনসোলে ফলাফল হওয়া উচিত:

আমরা যদি পূর্বের দিকে তাকাইdefiলারাভেলের রাত /tests, আমাদের দুটি ফাইল আছে:

tests/feature/ExampleTest.php :

class ExampleTest extends TestCase
{
    public function test_the_application_returns_a_successful_response()
    {
        $response = $this->get('/');
 
        $response->assertStatus(200);
    }
}

এখানে কী চলছে তা বোঝার জন্য আপনাকে কোনো বাক্য গঠন জানার দরকার নেই: হোম পেজ লোড করুন এবং স্ট্যাটাস কোড আছে কিনা তা পরীক্ষা করুন HTTP è "200 OK"।

পদ্ধতির নাম হিসাবেও পরিচিত test_the_application_returns_a_successful_response() যখন আপনি পরীক্ষার ফলাফলগুলি দেখেন তখন পাঠযোগ্য পাঠ্য হয়ে ওঠে, কেবলমাত্র একটি স্পেস দিয়ে আন্ডারলাইন চিহ্ন প্রতিস্থাপন করে।

tests/Unit/ExampleTest.php :

class ExampleTest extends TestCase
{
    public function test_that_true_is_true()
    {
        $this->assertTrue(true);
    }
}

একটু অর্থহীন মনে হচ্ছে, যাচাই করে দেখছেন এটা সত্য কিনা? 

আমরা একটু পরে ইউনিট পরীক্ষা সম্পর্কে বিশেষভাবে কথা বলব। আপাতত, প্রতিটি পরীক্ষায় সাধারণত কী ঘটে তা আপনাকে বুঝতে হবে।

  • ফোল্ডারে প্রতিটি পরীক্ষা ফাইল /tests একটি পিএইচপি ক্লাস যা এর TestCase প্রসারিত করে পিএইচপিউনিট
  • প্রতিটি ক্লাসের মধ্যে, আপনি একাধিক পদ্ধতি তৈরি করতে পারেন, সাধারণত একটি পরিস্থিতি পরীক্ষা করার জন্য একটি পদ্ধতি
  • প্রতিটি পদ্ধতির মধ্যে তিনটি ক্রিয়া রয়েছে: পরিস্থিতির প্রস্তুতি, তারপরে পদক্ষেপ এবং তারপরে ফলাফলটি প্রত্যাশিত কিনা তা যাচাই করা (নিশ্চিত করা)

কাঠামোগতভাবে, আপনাকে শুধু এইটুকুই জানতে হবে, বাকি সবকিছু নির্ভর করে আপনি যে সঠিক জিনিসগুলি পরীক্ষা করতে চান তার উপর।

একটি খালি পরীক্ষার ক্লাস তৈরি করতে, কেবল এই কমান্ডটি চালান:

php artisan make:test HomepageTest

ফাইল তৈরি হয় tests/Feature/HomepageTest.php:

class HomepageTest extends TestCase
{
    // Replace this method with your own ones
    public function test_example()
    {
        $response = $this->get('/');
 
        $response->assertStatus(200);
    }
}

এখন দেখা যাক লারাভেলে একটি পরীক্ষার কোড ব্যর্থ হলে কি হয়

আসুন এখন দেখা যাক যদি পরীক্ষার দাবী প্রত্যাশিত ফলাফল না দেয় তাহলে কি হয়।

আসুন এটিতে উদাহরণ পরীক্ষাগুলি পরিবর্তন করি:

class ExampleTest extends TestCase
{
    public function test_the_application_returns_a_successful_response()
    {
        $response = $this->get('/non-existing-url');
 
        $response->assertStatus(200);
    }
}
 
 
class ExampleTest extends TestCase
{
    public function test_that_true_is_false()
    {
        $this->assertTrue(false);
    }
}

এবং এখন, যদি আমরা কমান্ড চালান php artisan test আবার:

 FAIL  Tests\Unit\ExampleTest
⨯ that true is true
 
 FAIL  Tests\Feature\ExampleTest
⨯ the application returns a successful response
 
---
 
• Tests\Unit\ExampleTest > that true is true
Failed asserting that false is true.
 
at tests/Unit/ExampleTest.php:16
   12▕      * @return void
   13▕      */
   14▕     public function test_that_true_is_true()
   15▕     {
➜  16▕         $this->assertTrue(false);
   17▕     }
   18▕ }
   19▕
 
• Tests\Feature\ExampleTest > the application returns a successful response
Expected response status code [200] but received 404.
Failed asserting that 200 is identical to 404.
 
at tests/Feature/ExampleTest.php:19
   15▕     public function test_the_application_returns_a_successful_response()
   16▕     {
   17▕         $response = $this->get('/non-existing-url');
   18▕
➜  19▕         $response->assertStatus(200);
   20▕     }
   21▕ }
   22▕
 
 
Tests:  2 failed
Time:   0.11s

দুটি ব্যর্থ পরীক্ষা রয়েছে, যা FAIL হিসাবে চিহ্নিত, নীচে ব্যাখ্যা সহ এবং তীরগুলি ব্যর্থ হওয়া পরীক্ষার সঠিক লাইনের দিকে নির্দেশ করে। ত্রুটি এই ভাবে নির্দেশিত হয়.

উদাহরণ: লারাভেলে রেজিস্ট্রেশন ফর্ম কোড পরীক্ষা করা

ধরুন আমাদের একটি ফর্ম আছে এবং আমাদের বিভিন্ন ক্ষেত্রে পরীক্ষা করতে হবে: আমরা পরীক্ষা করি যে এটি অবৈধ ডেটা দিয়ে ব্যর্থ হয় কিনা, আমরা পরীক্ষা করি যে এটি সঠিক ইনপুট দিয়ে সফল হয়েছে কিনা ইত্যাদি।

অফিসিয়াল স্টার্টার কিট লারাভেল ব্রীজ দ্বারা i অন্তর্ভুক্ত এর মধ্যে কার্যকারিতা পরীক্ষা করা হচ্ছে. সেখান থেকে কিছু উদাহরণ দেখা যাক:

tests/Feature/RegistrationTest.php

use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
 
class RegistrationTest extends TestCase
{
    use RefreshDatabase;
 
    public function test_registration_screen_can_be_rendered()
    {
        $response = $this->get('/register');
 
        $response->assertStatus(200);
    }
 
    public function test_new_users_can_register()
    {
        $response = $this->post('/register', [
            'name' => 'Test User',
            'email' => 'test@example.com',
            'password' => 'password',
            'password_confirmation' => 'password',
        ]);
 
        $this->assertAuthenticated();
        $response->assertRedirect(RouteServiceProvider::HOME);
    }
}

এখানে আমাদের একটি ক্লাসে দুটি পরীক্ষা রয়েছে, যেহেতু তারা উভয়ই নিবন্ধন ফর্মের সাথে সম্পর্কিত: একটি পরীক্ষা করে যে ফর্মটি সঠিকভাবে লোড হয়েছে কিনা এবং অন্যটি জমাটি ভালভাবে কাজ করে কিনা তা পরীক্ষা করে৷

আসুন আমরা ফলাফল যাচাই করার জন্য আরও দুটি পদ্ধতির সাথে পরিচিত হই, আরও দুটি দাবি: $this->assertAuthenticated()$response->assertRedirect(). আপনি এর অফিসিয়াল ডকুমেন্টেশনে উপলব্ধ সমস্ত দাবী পরীক্ষা করতে পারেন পিএইচপিউনিট e লারাভেল রেসপন্স . নোট করুন যে কিছু সাধারণ দাবি এই বিষয়ে ঘটে $this, অন্যরা নির্দিষ্ট চেক করার সময় $responseরুট কল থেকে।

আরেকটি গুরুত্বপূর্ণ বিষয় হল use RefreshDatabase;বিবৃতি, স্ট্রোক সহ, ক্লাসের উপরে ঢোকানো। এটি প্রয়োজনীয় যখন পরীক্ষার ক্রিয়া ডাটাবেসকে প্রভাবিত করতে পারে, যেমন এই উদাহরণে, লগিং একটি নতুন এন্ট্রি যোগ করে usersডাটাবেস টেবিল। এর জন্য, আপনাকে একটি পৃথক পরীক্ষার ডাটাবেস তৈরি করতে হবে যা আপডেট করা হবে php artisan migrate:freshপ্রতিবার পরীক্ষা চালানো হয়।

আপনার কাছে দুটি বিকল্প রয়েছে: শারীরিকভাবে একটি পৃথক ডাটাবেস তৈরি করুন বা একটি ইন-মেমরি SQLite ডাটাবেস ব্যবহার করুন। উভয় ফাইল কনফিগার করা হয় phpunit.xmlডিফল্টরূপে প্রদান করা হয়defiসঙ্গে নিতা Laravel. বিশেষত, আপনার এই অংশটি প্রয়োজন:

<php>
    <env name="APP_ENV" value="testing"/>
    <env name="BCRYPT_ROUNDS" value="4"/>
    <env name="CACHE_DRIVER" value="array"/>
    <!-- <env name="DB_CONNECTION" value="sqlite"/> -->
    <!-- <env name="DB_DATABASE" value=":memory:"/> -->
    <env name="MAIL_MAILER" value="array"/>
    <env name="QUEUE_CONNECTION" value="sync"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="TELESCOPE_ENABLED" value="false"/>
</php>

দেখুন DB_CONNECTIONDB_DATABASEকোনটিতে মন্তব্য করা হয়? আপনার সার্ভারে যদি SQLite থাকে, তাহলে সবচেয়ে সহজ পদক্ষেপ হল সেই লাইনগুলিকে অকমমেন্ট করা এবং আপনার পরীক্ষাগুলি সেই ইন-মেমরি ডাটাবেসের বিরুদ্ধে চলবে।

এই পরীক্ষায় আমরা বলি যে ব্যবহারকারী সফলভাবে প্রমাণীকৃত হয়েছে এবং সঠিক হোমপেজে পুনঃনির্দেশিত হয়েছে, তবে আমরা ডাটাবেসের প্রকৃত ডেটাও পরীক্ষা করতে পারি।

এই কোড ছাড়াও:

$this->assertAuthenticated();
$response->assertRedirect(RouteServiceProvider::HOME);

আমরাও ব্যবহার করতে পারি ডাটাবেস পরীক্ষা দাবি এবং এই মত কিছু করুন:

$this->assertDatabaseCount('users', 1);
 
// Or...
$this->assertDatabaseHas('users', [
    'email' => 'test@example.com',
]);

লগইন পৃষ্ঠার উদাহরণ

এখন লারাভেল ব্রীজের সাথে একটি লগইন পৃষ্ঠার আরেকটি উদাহরণ দেখা যাক

tests/Feature/AuthenticationTest.php:

class AuthenticationTest extends TestCase
{
    use RefreshDatabase;
 
    public function test_login_screen_can_be_rendered()
    {
        $response = $this->get('/login');
 
        $response->assertStatus(200);
    }
 
    public function test_users_can_authenticate_using_the_login_screen()
    {
        $user = User::factory()->create();
 
        $response = $this->post('/login', [
            'email' => $user->email,
            'password' => 'password',
        ]);
 
        $this->assertAuthenticated();
        $response->assertRedirect(RouteServiceProvider::HOME);
    }
 
    public function test_users_can_not_authenticate_with_invalid_password()
    {
        $user = User::factory()->create();
 
        $this->post('/login', [
            'email' => $user->email,
            'password' => 'wrong-password',
        ]);
 
        $this->assertGuest();
    }
}

এটা লগইন ফর্ম সম্পর্কে. যুক্তি নিবন্ধন অনুরূপ, তাই না? তবে দুটির পরিবর্তে তিনটি পদ্ধতি, তাই এটি ভাল এবং খারাপ উভয় পরিস্থিতি পরীক্ষা করার একটি উদাহরণ। সুতরাং, সাধারণ যুক্তি হল যে আপনার উভয় ক্ষেত্রেই পরীক্ষা করা উচিত: কখন জিনিসগুলি ভাল হয় এবং কখন তারা ব্যর্থ হয়।

উদ্ভাবন নিউজলেটার
উদ্ভাবনের সবচেয়ে গুরুত্বপূর্ণ খবর মিস করবেন না। ইমেল দ্বারা তাদের পেতে সাইন আপ করুন.

এছাড়াও, এই পরীক্ষায় আপনি যা দেখেন তা হল এর ব্যবহার ডাটাবেস কারখানা : লারাভেল ভুয়া ব্যবহারকারী তৈরি করে ( আবার, আপনার আপডেট করা পরীক্ষার ডাটাবেসে ) এবং তারপরে সঠিক বা ভুল শংসাপত্র সহ লগ ইন করার চেষ্টা করে।

আবারও, লারাভেল ফ্যাক্টরি প্রি জেনারেট করেdefiনীতার জন্য মিথ্যা তথ্য দিয়ে Userমডেল, বাক্সের বাইরে।

database/factories/UserFactory.php:

class UserFactory extends Factory
{
    public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    }
}

আপনি দেখুন, লারাভেল নিজেই কতগুলি জিনিস প্রস্তুত করে, তাই পরীক্ষা শুরু করা কি আমাদের পক্ষে সহজ হবে?

তাই যদি আমরা মৃত্যুদন্ড কার্যকর php artisan testলারাভেল ব্রীজ ইনস্টল করার পরে, আমাদের এইরকম কিছু দেখতে হবে:

 PASS  Tests\Unit\ExampleTest
✓ that true is true
 
 PASS  Tests\Feature\Auth\AuthenticationTest
✓ login screen can be rendered
✓ users can authenticate using the login screen
✓ users can not authenticate with invalid password
 
 PASS  Tests\Feature\Auth\EmailVerificationTest
✓ email verification screen can be rendered
✓ email can be verified
✓ email is not verified with invalid hash
 
 PASS  Tests\Feature\Auth\PasswordConfirmationTest
✓ confirm password screen can be rendered
✓ password can be confirmed
✓ password is not confirmed with invalid password
 
 PASS  Tests\Feature\Auth\PasswordResetTest
✓ reset password link screen can be rendered
✓ reset password link can be requested
✓ reset password screen can be rendered
✓ password can be reset with valid token
 
 PASS  Tests\Feature\Auth\RegistrationTest
✓ registration screen can be rendered
✓ new users can register
 
 PASS  Tests\Feature\ExampleTest
✓ the application returns a successful response
 
Tests:  17 passed
Time:   0.61s

ইউনিট পরীক্ষা এবং অন্যদের তুলনায় কার্যকরী পরীক্ষা

আপনি সাবফোল্ডার দেখেছেন tests/Feature e tests/Unit ?. 

তাদের মধ্যে পার্থক্য কী? 

বিশ্বব্যাপী, Laravel/PHP ইকোসিস্টেমের বাইরে, বিভিন্ন ধরনের স্বয়ংক্রিয় পরীক্ষা রয়েছে। আপনি যেমন পদ খুঁজে পেতে পারেন:

  • ইউনিট পরীক্ষা
  • বৈশিষ্ট্য পরীক্ষা
  • ইন্টিগ্রেশন পরীক্ষা
  • কার্যকরী পরীক্ষা
  • এন্ড-টু-এন্ড টেস্টিং
  • গ্রহণযোগ্যতা পরীক্ষা
  • ধোঁয়া পরীক্ষা
  • ইত্যাদি

এটি জটিল শোনাচ্ছে, এবং এই ধরনের পরীক্ষার মধ্যে প্রকৃত পার্থক্য কখনও কখনও ঝাপসা হয়ে যায়। এই কারণেই লারাভেল এই সমস্ত বিভ্রান্তিকর পদগুলিকে সরল করেছে এবং তাদের দুটিতে গোষ্ঠীবদ্ধ করেছে: ইউনিট/বৈশিষ্ট্য।

সহজ কথায়, বৈশিষ্ট্য পরীক্ষাগুলি আপনার অ্যাপ্লিকেশনগুলির প্রকৃত কার্যকারিতা চালানোর চেষ্টা করে: URL পান, API কল করুন, ফর্মটি পূরণ করার মতো সঠিক আচরণ অনুকরণ করুন। বৈশিষ্ট্য পরীক্ষাগুলি সাধারণত একই বা অনুরূপ ক্রিয়াকলাপগুলি সম্পাদন করে যেমন কোনও প্রকল্প ব্যবহারকারী বাস্তব জীবনে ম্যানুয়ালি করে।

ইউনিট পরীক্ষার দুটি অর্থ আছে। সাধারণভাবে, আপনি দেখতে পারেন যে কোনো স্বয়ংক্রিয় পরীক্ষাকে "ইউনিট টেস্টিং" বলা হয় এবং পুরো প্রক্রিয়াটিকে "ইউনিট টেস্টিং" বলা যেতে পারে। কিন্তু কার্যকারিতা বনাম ইউনিটের প্রসঙ্গে, এই প্রক্রিয়াটি বিচ্ছিন্নভাবে কোডের একটি নির্দিষ্ট অ-পাবলিক ইউনিট পরীক্ষা করার বিষয়ে। উদাহরণস্বরূপ, আপনার কাছে একটি পদ্ধতি সহ একটি লারাভেল ক্লাস রয়েছে যা কিছু গণনা করে, যেমন প্যারামিটার সহ মোট অর্ডার মূল্য। অতএব, ইউনিট পরীক্ষাটি বিভিন্ন পরামিতি সহ সেই পদ্ধতি (কোড ইউনিট) থেকে সঠিক ফলাফল প্রত্যাবর্তন করা হয়েছে কিনা তা উল্লেখ করবে।

একটি ইউনিট পরীক্ষা তৈরি করতে, আপনাকে একটি পতাকা যোগ করতে হবে:

php artisan make:test OrderPriceTest --unit

উত্পন্ন কোড প্রাক ইউনিট পরীক্ষার হিসাবে একইdefiলারাভেল সিস্টেম:

class OrderPriceTest extends TestCase
{
    public function test_example()
    {
        $this->assertTrue(true);
    }
}

আপনি দেখতে পাচ্ছেন, এটি বিদ্যমান নেই RefreshDatabase, এবং এই এক defiসবচেয়ে সাধারণ ইউনিট পরীক্ষার সংজ্ঞা: এটি ডাটাবেস স্পর্শ করে না, এটি একটি "ব্ল্যাক বক্স" হিসাবে কাজ করে, চলমান অ্যাপ্লিকেশন থেকে বিচ্ছিন্ন।

আমি আগে উল্লিখিত উদাহরণটি অনুকরণ করার চেষ্টা করছি, আসুন কল্পনা করি আমাদের একটি পরিষেবা ক্লাস আছে OrderPrice.

app/Services/OrderPriceService.php:

class OrderPriceService
{
    public function calculatePrice($productId, $quantity, $tax = 0.0)
    {
        // Some kind of calculation logic
    }
}

তারপর, ইউনিট পরীক্ষা এই মত কিছু দেখতে পারে:

class OrderPriceTest extends TestCase
{
    public function test_single_product_no_taxes()
    {
        $product = Product::factory()->create(); // generate a fake product
        $price = (new OrderPriceService())->calculatePrice($product->id, 1);
        $this->assertEquals(1, $price);
    }
 
    public function test_single_product_with_taxes()
    {
        $price = (new OrderPriceService())->calculatePrice($product->id, 1, 20);
        $this->assertEquals(1.2, $price);
    }
 
    // More cases with more parameters
}

Laravel প্রকল্পগুলির সাথে আমার ব্যক্তিগত অভিজ্ঞতায়, বেশিরভাগ পরীক্ষাগুলি বৈশিষ্ট্য পরীক্ষা, ইউনিট পরীক্ষা নয়। প্রথমত, আপনার অ্যাপ্লিকেশনটি কাজ করে কিনা তা পরীক্ষা করতে হবে, প্রকৃত লোকেরা কীভাবে এটি ব্যবহার করবে।

পরবর্তী, আপনার যদি বিশেষ গণনা বা যুক্তি থাকে তবে আপনি করতে পারেন defiএকটি ইউনিট হিসাবে nire, পরামিতি সহ, আপনি এটির জন্য বিশেষভাবে ইউনিট পরীক্ষা তৈরি করতে পারেন।

কখনও কখনও, পরীক্ষার লেখার জন্য কোডটিকে নিজেই সংশোধন করতে হয় এবং এটিকে আরও "পরীক্ষাযোগ্য" করার জন্য পুনরায় ফ্যাক্টর করার প্রয়োজন হয়: ইউনিটগুলিকে বিশেষ ক্লাস বা পদ্ধতিতে বিভক্ত করা।

কখন/কীভাবে পরীক্ষা করতে হবে?

এর প্রকৃত ব্যবহার কি php artisan test, আপনি কখন এটি চালানো উচিত?

আপনার ব্যবসায়িক কর্মপ্রবাহের উপর নির্ভর করে বিভিন্ন পন্থা রয়েছে, কিন্তু সাধারণভাবে আপনাকে নিশ্চিত করতে হবে যে সমস্ত পরীক্ষাগুলি "সবুজ" (অর্থাৎ ত্রুটি-মুক্ত) হয় তা সংগ্রহস্থলে চূড়ান্ত কোড পরিবর্তনগুলি ঠেলে দেওয়ার আগে।

তারপরে, আপনি আপনার টাস্কে স্থানীয়ভাবে কাজ করেন, এবং যখন আপনি মনে করেন যে আপনি সম্পন্ন করেছেন, আপনি কিছু ভঙ্গ করেননি তা নিশ্চিত করতে কিছু পরীক্ষা চালান। মনে রাখবেন, আপনার কোডটি শুধুমাত্র আপনার নিজের যুক্তিতেই বাগ সৃষ্টি করতে পারে না বরং অনেক আগে লেখা অন্য কারো কোডে অনিচ্ছাকৃতভাবে অন্য কিছু আচরণ ভেঙে দিতে পারে।

আমরা যদি এটিকে আরও এক ধাপ এগিয়ে নিয়ে যাই তবে এটি স্বয়ংক্রিয়ভাবে সম্ভব গলিত জিনিস বিভিন্ন সিআই/সিডি টুলের সাহায্যে, যখনই কেউ একটি নির্দিষ্ট গিট শাখায় পরিবর্তন করতে বা প্রোডাকশন শাখায় কোড মার্জ করার আগে আপনি চালানোর জন্য পরীক্ষাগুলি নির্দিষ্ট করতে পারেন। সহজতম ওয়ার্কফ্লো হবে গিথুব অ্যাকশন ব্যবহার করা, আমার কাছে আছে একটি পৃথক ভিডিও যা এটি প্রমাণ করে।

আপনি কি পরীক্ষা করা উচিত?

তথাকথিত "পরীক্ষা কভারেজ" কত বড় হওয়া উচিত সে সম্পর্কে বিভিন্ন মতামত রয়েছে: প্রতিটি পৃষ্ঠায় সম্ভাব্য প্রতিটি অপারেশন এবং কেস চেষ্টা করুন, বা কাজটিকে সবচেয়ে গুরুত্বপূর্ণ অংশগুলিতে সীমাবদ্ধ করুন৷

প্রকৃতপক্ষে, এখানেই আমি এমন লোকদের সাথে একমত যারা স্বয়ংক্রিয় পরীক্ষার প্রকৃত সুবিধা প্রদানের চেয়ে বেশি সময় নেওয়ার অভিযোগ করে। আপনি প্রতিটি একক বিশদ বিবরণের জন্য পরীক্ষা লিখলে এটি ঘটতে পারে। এটি বলেছে, এটি আপনার প্রকল্পের জন্য প্রয়োজন হতে পারে: প্রধান প্রশ্ন হল "সম্ভাব্য ত্রুটির মূল্য কি"।

অন্য কথায়, "এই কোডটি ব্যর্থ হলে কি হবে?" প্রশ্ন জিজ্ঞাসা করে আপনাকে আপনার পরীক্ষার প্রচেষ্টাকে অগ্রাধিকার দিতে হবে? আপনার পেমেন্ট সিস্টেমে বাগ থাকলে, এটি সরাসরি ব্যবসাকে প্রভাবিত করবে। সুতরাং যদি আপনার ভূমিকা/অনুমতিগুলির কার্যকারিতা ভাঙ্গা হয় তবে এটি একটি বিশাল নিরাপত্তা সমস্যা।

আমি পছন্দ করি যে ম্যাট স্টাফার একটি কনফারেন্সে এটি করেছিলেন: "আপনাকে প্রথমে সেই জিনিসগুলি পরীক্ষা করতে হবে যেগুলি যদি তারা ব্যর্থ হয় তবে আপনাকে চাকরি থেকে বরখাস্ত করবে।" অবশ্যই এটি একটি অতিরঞ্জন, কিন্তু আপনি ধারণা পাবেন: প্রথমে গুরুত্বপূর্ণ জিনিস চেষ্টা করুন. এবং তারপর অন্যান্য বৈশিষ্ট্য, যদি আপনি সময় আছে.

PEST: PHPUnit এর নতুন বিকল্প

উপরের সমস্ত উদাহরণ লারাভেল প্রি টেস্টিং টুলের উপর ভিত্তি করেdefiরাত: পিএইচপিউনিট . কিন্তু বছরের পর বছর ধরে বাস্তুতন্ত্রে অন্যান্য সরঞ্জাম উপস্থিত হয়েছে এবং সর্বশেষ জনপ্রিয়গুলির মধ্যে একটি হল কীটপতঙ্গ . সরকারী লারাভেল কর্মচারী দ্বারা নির্মিত নুনো মাদুরো , সিনট্যাক্সকে সরল করা, পরীক্ষার জন্য লেখার কোড আরও দ্রুততর করার লক্ষ্য।

ফণা অধীনে, এটি সঞ্চালিত হয় su PHPUnit, একটি অতিরিক্ত স্তর হিসাবে, কিছু পূর্ব-পুনরাবৃত্ত অংশগুলিকে ছোট করার চেষ্টা করছেdefiPHPUnit কোডের nite.

এর একটি উদাহরণ তাকান. প্রাক বৈশিষ্ট্য পরীক্ষা ক্লাস মনে রাখবেনdefiলারাভেলে নাইটেড? আমি আপনাকে মনে করিয়ে দেব:

namespace Tests\Feature;
 
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
 
class ExampleTest extends TestCase
{
    public function test_the_application_returns_a_successful_response()
    {
        $response = $this->get('/');
 
        $response->assertStatus(200);
    }
}

আপনি কি জানেন PEST এর সাথে একই পরীক্ষা কেমন হবে?

test('the application returns a successful response')->get('/')->assertStatus(200);

হ্যাঁ, কোডের এক লাইন এবং এটাই। সুতরাং, PEST এর লক্ষ্য হল এর ওভারহেড অপসারণ করা:

  • সবকিছুর জন্য ক্লাস এবং পদ্ধতি তৈরি করা;
  • টেস্ট কেস এক্সটেনশন;
  • পৃথক লাইনে ক্রিয়া স্থাপন করে: PEST-এ আপনি সেগুলিকে একসাথে চেইন করতে পারেন।

লারাভেলে একটি PEST পরীক্ষা তৈরি করতে, আপনাকে একটি অতিরিক্ত পতাকা নির্দিষ্ট করতে হবে:

php artisan make:test HomepageTest --pest

এই লেখার মতো, PEST Laravel ডেভেলপারদের মধ্যে বেশ জনপ্রিয়, কিন্তু এই অতিরিক্ত টুলটি ব্যবহার করবেন এবং এর সিনট্যাক্স শিখবেন কিনা, সেইসাথে একটি PHPUnit নোট শিখবেন কিনা তা আপনার ব্যক্তিগত পছন্দ।

BlogInnovazione.it

উদ্ভাবন নিউজলেটার
উদ্ভাবনের সবচেয়ে গুরুত্বপূর্ণ খবর মিস করবেন না। ইমেল দ্বারা তাদের পেতে সাইন আপ করুন.

সাম্প্রতিক নিবন্ধ

ক্যাটানিয়া পলিক্লিনিকে অ্যাপল দর্শকের সাথে অগমেন্টেড রিয়েলিটিতে উদ্ভাবনী হস্তক্ষেপ

অ্যাপল ভিশন প্রো কমার্শিয়াল ভিউয়ার ব্যবহার করে ক্যাটানিয়া পলিক্লিনিকে একটি চক্ষুরোগ অপারেশন করা হয়েছিল...

3 মে 2024

শিশুদের জন্য রঙিন পৃষ্ঠাগুলির উপকারিতা - সব বয়সের জন্য একটি জাদু বিশ্ব

রঙের মাধ্যমে সূক্ষ্ম মোটর দক্ষতার বিকাশ শিশুদের লেখার মতো জটিল দক্ষতার জন্য প্রস্তুত করে। রঙ…

2 মে 2024

ভবিষ্যত এখানে: শিপিং শিল্প কীভাবে বৈশ্বিক অর্থনীতিতে বিপ্লব ঘটাচ্ছে

নৌ সেক্টর একটি সত্যিকারের বৈশ্বিক অর্থনৈতিক শক্তি, যা 150 বিলিয়ন বাজারের দিকে নেভিগেট করেছে...

1 মে 2024

প্রকাশকরা এবং OpenAI কৃত্রিম বুদ্ধিমত্তা দ্বারা প্রক্রিয়াকৃত তথ্যের প্রবাহ নিয়ন্ত্রণ করতে চুক্তি স্বাক্ষর করে

গত সোমবার, ফাইন্যান্সিয়াল টাইমস ওপেনএআই-এর সাথে একটি চুক্তি ঘোষণা করেছে। FT তার বিশ্বমানের সাংবাদিকতার লাইসেন্স দেয়...

30 এপ্রিল 2024

আপনার ভাষায় উদ্ভাবন পড়ুন

উদ্ভাবন নিউজলেটার
উদ্ভাবনের সবচেয়ে গুরুত্বপূর্ণ খবর মিস করবেন না। ইমেল দ্বারা তাদের পেতে সাইন আপ করুন.

আমাদের অনুসরণ