UnitTest: Kiểm thử ở mức đơn vị mã nguồn. Một đơn vị mã nguồn là thành phần nhỏ nhất trong mã nguồn mà chúng ta có thể kiểm tra như. Trong Unit Test ta sẽ kiểm thử các class, method,…Mục tiêu của unit testing là kiểm tra tính đúng đắn trong các xử lý của từng đơn vị mã nguồn.
Hiểu đơn giản đây là công việc viết code để test code chúng ta viết ra.
Để thực hiện công việc này chúng ta cần PHPUnit và trong Laravel tích hợp sẵn PHPUnit.
Trong bài viết này mình sẽ demo 1 ví dụ về unit test
Tạo model và migration
Các bạn chạy lệnh để tạo ra model và migration Category
Vậy là đã xong các chức năng thêm sửa xóa rồi. bắt đầu viết test thôi !!! :100::100:
Tiến hành tạo CRUD Unit Testing
Để tạo 1 test, ta sử dụng câu lệnh:
1 2 3 4
// Tạo 1 test trong thư mục Feature php artisan make:test CategoryTest // Tạo 1 test trong thư mục Unit php artisan make:test CategoryTest --unit
Lưu ý: Nội dung bên trong thư mục Feature hay Unit có cấu trúc giống thư mục app/ ví dụ app/Repositories/CategoryRepository.php thì trong thư mục Unit là test/Unit/Repositories/CategoryRepository.php cho dễ quản lý nhé
classCategoryTestextendsTestCase { protected $category; publicfunctionsetUp() : void { parent::setUp(); $this->faker = Faker::create(); // chuẩn bị dữ liệu test $this->category = [ 'name' => $this->faker->name, 'description' => $this->faker->name, ]; // khởi tạo lớp CategoryRepository $this->categoryRepository = new CategoryRepository(); }
/** * A basic unit test store * * @return void */ publicfunctiontestStore() { // Gọi hàm tạo $category = $this->categoryRepository->storeCategory($this->category); // Kiểm tra xem kết quả trả về có là thể hiện của lớp Category hay không $this->assertInstanceOf(Category::class, $category); // Kiểm tra data trả về $this->assertEquals($this->category['name'], $category->name); $this->assertEquals($this->category['description'], $category->description); // Kiểm tra dữ liệu có tồn tại trong cơ sở dữ liệu hay không $this->assertDatabaseHas('categories', $this->category); } }
vậy là xong . sau đó chúng ta chạy lệnh để test:
1
vendor/bin/phpunit
Nếu trả về như này là đã pass hết trường hợp:
1 2 3 4 5 6 7
PHPUnit 7.5.13 by Sebastian Bergmann and contributors.
publicfunctiontestUpdate() { // Tạo dữ liệu mẫu $category = factory(Category::class)->create(); $newCategory = $this->categoryRepository->updateCategory($this->category, $category); // Kiểm tra dữ liệu trả về $this->assertInstanceOf(Category::class, $newCategory); $this->assertEquals($newCategory->name, $this->category['name']); $this->assertEquals($newCategory->description, $this->category['description']); // Kiểm tra xem cơ sở dữ liệu đã được cập nhập hay chưa $this->assertDatabaseHas('categories', $this->category); }
publicfunctiontestDestroy() { $category = factory(Category::class)->create(); $deleteCategory = $this->categoryRepository->destroyCategory($category); // Kiểm tra dữ liệu có trả về true hay không $this->assertTrue($deleteCategory); // kiểm tra xem dữ liệu đã được xóa trong cơ sở dữ liệu hay chưa $this->assertDatabaseMissing('categories', $category->toArray()); } }
Tổng kết
Hy vọng qua bài viết này các bạn có thể hiểu hơn về unit test