0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Hướng dẫn Viết Kiểm Thử (Test) Hiệu Quả với Laravel

Đăng vào 4 ngày trước

• 5 phút đọc

Giới thiệu

Kiểm thử (Testing) đóng vai trò vô cùng quan trọng trong phát triển phần mềm, đặc biệt là trong việc xây dựng ứng dụng web. Laravel, framework phát triển ứng dụng web mạnh mẽ của PHP, mang đến một hệ thống kiểm thử toàn diện và dễ sử dụng.

Tại sao kiểm thử lại cần thiết?

  1. Đảm bảo chất lượng mã nguồn: Việc kiểm thử giúp xác nhận rằng mã nguồn của ứng dụng Laravel hoạt động đúng đắn và ổn định, từ đó nâng cao độ tin cậy và sự hài lòng của người dùng.
  2. Phát hiện và ngăn chặn lỗi: Kiểm thử cho phép phát hiện các lỗi sớm trong quá trình phát triển, giúp giảm thiểu rủi ro và chi phí sửa chữa trong tương lai.
  3. Hỗ trợ mở rộng và duy trì: Việc có sẵn các bài kiểm thử giúp việc mở rộng và duy trì mã nguồn dễ dàng hơn, đảm bảo tính thống nhất và hiệu suất ứng dụng.

Các loại kiểm thử trong Laravel

  • Kiểm thử đơn vị (Unit Testing): Kiểm thử từng thành phần riêng lẻ của mã nguồn.
  • Kiểm thử tích hợp (Integration Testing): Kiểm thử sự tương tác giữa các thành phần khác nhau của ứng dụng.
  • Kiểm thử tính năng (Feature Testing): Kiểm thử các tính năng cụ thể của ứng dụng thông qua HTTP requests.

Cấu trúc thư mục Kiểm thử

Trong Laravel, các hàm kiểm thử được lưu trữ trong thư mục tests, giúp việc quản lý và tổ chức kiểm thử hiệu quả.

Thư mục tests/

  • Feature: Chứa các hàm kiểm thử tính năng của hệ thống, tập trung vào việc kiểm thử các chức năng thông qua HTTP requests.
  • Unit: Chứa các hàm kiểm thử đơn vị, chỉ kiểm thử các phần riêng lẻ mà không phụ thuộc vào các thành phần khác.

File TestCase.php

Là lớp trừu tượng mà mọi bài kiểm thử trong Laravel kế thừa. Nó cung cấp phương thức và thuộc tính cần thiết để thực hiện kiểm thử.

File phpunit.xml

Tập tin cấu hình cho PHPUnit, định nghĩa các thiết lập kiểm thử, bao gồm cơ sở dữ liệu và môi trường.

Giới thiệu về Mocking

Mocking là phương pháp tạo ra các đối tượng giả để thay thế các phần thực tế của ứng dụng. Điều này giúp kiểm thử các phần của ứng dụng mà không cần phụ thuộc vào các thành phần bên ngoài. Ví dụ, để kiểm thử một controller trong Laravel phụ thuộc vào service, bạn có thể mock service đó để kiểm thử logic của controller.

php Copy
public function testUserController()
{
    // Tạo một mock của UserService
    $userService = $this->createMock(UserService::class);

    // Thiết lập phương thức mock
    $userService->expects($this->once())
                ->method('getUser')
                ->willReturn(['id' => 1, 'name' => 'John Doe']);

    // Inject mock vào controller
    $controller = new UserController($userService);

    // Kiểm tra kết quả
    $result = $controller->getUser();

    $this->assertEquals(['id' => 1, 'name' => 'John Doe'], $result);
}

Unit Testing

Unit Testing là quy trình kiểm thử các thành phần nhỏ trong mã nguồn một cách độc lập. Trong Laravel, unit test được thực hiện thông qua các test case để kiểm tra các phần như Models, Services, Repositories, và các lớp Helpers.

Viết Test Cases cho Unit Test

Để viết test case trong Laravel, bạn cần tạo một lớp kiểm thử cho thành phần bạn muốn kiểm tra. Trong lớp này, bạn định nghĩa các phương thức để kiểm tra các hành vi của thành phần đó.

Ví dụ:

php Copy
class MathTest extends TestCase
{
    public function testCalculateTotalPrice()
    {
        // Tạo một instance của Product Model
        $product = new Product();

        // Thiết lập giá trị cho thuộc tính
        $product->price = 10;
        $product->quantity = 5;

        // Gọi phương thức calculateTotalPrice()
        $totalPrice = $product->calculateTotalPrice();

        // Kiểm tra kết quả
        $this->assertEquals(50, $totalPrice);
    }
}

Cách Chạy Test

Để chạy test, bạn sử dụng lệnh php artisan test. Nếu muốn chạy một class cụ thể, thêm flag --filter.

bash Copy
php artisan test

Feature Testing

Feature Testing kiểm tra các tính năng của ứng dụng từ góc độ người dùng. Trong Laravel, bạn có thể sử dụng testing HTTP để kiểm tra tính năng của ứng dụng.

Ví dụ kiểm tra tính năng đăng nhập

php Copy
public function testUserLogin()
{
    $response = $this->post('/login', [
        'email' => 'example@email.com',
        'password' => 'password',
    ]);

    $response->assertStatus(200)
             ->assertSessionHas('user');
}

Kiểm thử độ bao phủ mã nguồn (Test Code Coverage)

Test code coverage là phương pháp đo lường mức độ bao phủ của các bài kiểm thử đối với mã nguồn. Mục tiêu là đảm bảo mọi phần của mã nguồn được kiểm thử đầy đủ.

Các thành phần của Test code coverage

  • Lines (dòng mã)
  • Functions & Methods (các hàm và phương thức)
  • Classes & Traits (các lớp và trait)

Tại sao phải sử dụng kiểm thử độ bao phủ?

  1. Đảm bảo mã viết ra có chất lượng, không có lỗi và tuân thủ quy chuẩn.
  2. Giúp giảm thiểu bugs trong sản phẩm.
  3. Đảm bảo bạn đang lập trình theo đúng yêu cầu của khách hàng.
  4. Cung cấp sản phẩm hoàn thiện với số lượng bugs tối thiểu cho QA và Tester.

Cách thực hiện kiểm thử độ bao phủ trong Laravel

Chạy lệnh sau:

bash Copy
vendor/bin/phpunit --coverage-html coverage-report

Sau khi chạy, bạn sẽ có thư mục coverage-report chứa báo cáo độ bao phủ mã nguồn.

Kết luận

Việc viết kiểm thử mang lại nhiều lợi ích, không chỉ giảm thiểu rủi ro cho mã nguồn mà còn nâng cao khả năng phân tích và hiểu rõ logic của ứng dụng. Hy vọng bài viết sẽ giúp bạn nhận thức tốt hơn về tầm quan trọng của việc kiểm thử trong các dự án phát triển phần mềm.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào