Tại sao dùng unit test để kiểm thử thay vì dùng Postman?

Hi mọi người, cho mình hỏi tại sao phải dành nhiều thời gian để viết unit test trong khi có thể dùng postman để thực hiện điều đó ạ? Mình cảm ơn!

2 cái đó có giống nhau đâu?
cái nay không khác gì bạn hỏi sao có người ra siêu thị điện máy mua máy lạnh, có người mua tủ lạnh
trước khi bạn đặt câu hỏi, thì bạn cần hiểu những gì bạn cần hỏi

6 Likes

Mình dùng Postman để kiểm tra các trường hợp có thể xảy ra ở đoạn code của mình và từ đó sửa lỗi. Nhưng mọi người bảo phải viết thêm unit test ạ. Nên mình không hiểu unit test có lợi ở đâu mà mình phải viết thêm ạ.

Đơn giản là mỗi lần code xong bạn ngồi test lại toàn bộ code thì có ổn không? Ngoài ra lấy gì chứng minh code bạn chạy chính xác ngoài việc tin là vậy nếu không dùng units test, hay lại ngồi xuống test lại từng api

4 Likes

postman là integration test. còn unit test là … unit test. như kisuluoibieng nói, 2 thằng này vốn khác nhau mà bạn

6 Likes

Cảm ơn mọi người đã giải đáp giúp mình ạ :green_heart:

Unit test là white box test, mục đích để kiểm tra luồng input/output của code mình chạy đúng chưa, nên dev cần tự viết vì dev hiểu rõ cấu trúc code với ngôn ngữ

Còn Postman nó là Tool, thường dùng để test api thoy

5 Likes

Postman = test thủ công
Unit test = test tự động

2 Likes

Tớ nghĩ cậu chưa hiểu rõ Unit test là gì, và postman làm gì trong quá trình test, nên cậu mới có thắc mắc này :smile:
Để tớ giải thích cho cậu nhé!

Unit test là gì?

Unit test (kiểm thử đơn vị) là việc cậu test các đơn vị của phần mềm. Đơn vị của phần mềm thường là các hành vi của 1 đối tượng, các hàm/method có chứa logic làm gì đó.
Điều đó có nghĩa là:

  • Các đơn vị không chứa logic không phải là đối tượng test.
    Getter, setter, hay 1 method chỉ delegate sang 1 method khác… thường không phải đối tượng của test này.
  • Sự tương tác giữa các thành phần/đơn vị trong phần mềm cũng không thuộc trách nhiệm của test này.
    Gọi database, tạo file trên ổ đĩa… không thuộc phạm vi của test này.
    Vậy nên, unit test thường độc lập, không phụ thuộc vào bất cứ yếu tố nào khác. Nếu method cậu cần test có yếu tố này, nó phải được mock thay vì dùng liên kết thật. Điều này cũng khiến unit test nhẹ và chạy rất nhanh.

Cậu cần test unit vì các lý do dưới đây:

  1. Khi cậu đảm bảo từng đơn vị hoạt động chính xác như cách nó được thiết kế, cậu hạn chế được bug do các method đó hoạt động sai.
    Các unit test đóng vai trò quan trọng như 1 tấm lưới để cậu chắc chắn từng đơn vị trong phần mềm hoạt động chính xác. Đó là điều rất quan trọng, đặc biệt khi cậu cần maintain/sửa code để thêm tính năng/refactor code.
    Unit test lúc này sẽ giúp cậu đảm bảo cậu không thay đổi hành vi hiện có của các đơn vị.
    Điều thú vị là, unit test với bản chất tự nhiên độc lập, không phụ thuộc vào bất cứ yếu tố nào như database, etc., là thứ cho cậu phản hồi gần như ngay lập tức khi cậu thay đổi bất cứ thứ gì trong code (unit test thường có thời gian thực thi dưới 0.1s. Bất cứ unit test nào thực hiện lâu hơn, cần phải được viết lại). Cậu không thể kỳ vọng hiệu suất phát hiện ra lỗi sớm hơn thế đâu :smile:
  2. Unit test là tài liệu hướng dẫn sử dụng method của cậu.
    Hẳn nhiên rồi, cậu chỉ cần đọc test là sẽ hiểu method đó nên được truyền giá trị gì, kết quả kỳ vọng của nó là gì.

Với các lý do trên, unit test có vai trò vô cùng quan trọng trong các mô hình phát triển phần mềm hiện đại. Trong test pyramid, unit test nên là test có số lượng nhiều nhất.

Postman làm gì trong quá trình test phần mềm?

Về cơ bản, postman có thể được dùng cho integration test (test tích hợp - cậu buộc phải có 1 ứng dụng chạy hoàn chỉnh, với các kết nối cần thiết tới database, etc.). Cậu hoàn toàn có thể tự động chạy 1 postman collection, hay dùng newman, để tự động hóa integration test.
Tuy nhiên, postman không thể được dùng để thực hiện unit test. Cậu không thể mock database connection như cách cậu mock trong unit test, hay loại bỏ hoàn toàn các yếu tố phụ thuộc. Postman cũng không thể được dùng để gọi riêng 1 method bất kỳ trong phần mềm của cậu.
Integration test thường chậm hơn rất nhiều so với unit test (do cậu cần khởi động phần mềm, thiết lập tất cả các kết nối tới các thành phần khác), đồng thời cũng tốn nhiều công để setup hơn (cậu cần có tất cả các yếu tố phụ thuộc available cho integration test), vậy nên integration test thường chỉ chú trọng vào test những điều mà unit test bỏ sót (kết nối với các đơn vị khác như DB…), thay vì test business logic như unit test. Do đó, cậu không nên, và không thể thay thế unit test bằng integration test với postman.

Hope it helps!

9 Likes

Giờ thì tớ hiểu rồi nè. Cảm ơn cậu nhiều nhiều :smiling_face_with_three_hearts: :smiling_face_with_three_hearts: :smiling_face_with_three_hearts:

1 Like

khi giao 1 task người ta có tính estimate luôn cho việc viết doc và viết unit test ko bro

Cái này thì tùy từng tổ chức và cá nhân quyết định. Với cá nhân tớ, tớ luôn đưa viết doc và viết test vào estimate, vì đó là điều phải làm mà :smile: Code không có test không phải là code hoàn chỉnh, sản phẩm không có doc hướng dẫn cũng như vậy.

Cơ mà tớ cũng thấy nhiều người chỉ estimate cost implement thôi. Đó là lý do tớ đề cập nó là “optional” :smile:

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?