- vừa được xem lúc

01. Giới thiệu về Unit Test trong .NET

0 0 10

Người đăng: Hoàng Cao Phi

Theo Viblo Asia

Giới thiệu về Unit Test trong .NET

Unit testing không phải là một khái niệm quá mới mẻ trong phát triển phần mềm.

1 unit (use case) là gì

Trước khi tìm hiểu Unit Test là gì, chúng ta sẽ tìm hiểu một unit là gì:

  • Một unit là tập hợp các hành động xảy ra giữa việc gọi một phương thức public trong hệ thống và một kết quả được tạo ra bằng việc test hệ thống đó. Kết quả đó có thể là:

    • Khi gọi một phương thức public sẽ trả về một giá trị rõ ràng (không phải phương thức void).
    • Thay đổi trạng thái hoặc hành vi của hệ thống trước và sau khi phương thức đó được gọi test. (Ví dụ: thay đổi thuộc tính tham số hay các biển static...).
    • Gọi sang một bên thứ 3 mà bên đó không trả về bất kì giá trị gì (Ví dụ: hệ thống logging...).
  • Vì vậy, một unit có thể bao gồm ít nhất một phương thức, hoặc nhiều lớp để đạt được một mục đích gì đó.

Unit test là gì?

Một unit test là một đoạn code gọi một unit (use case) và kiểm tra kết quả cuối cùng của unit đó, nếu kết quả đúng với giả định => thử nghiệm thành công, ngược lại thì thất bại.

Ví dụ: image.png

Trong hàm trên có 2 unit:

  1. Khi gọi phương thức Withdraw, với unit thứ nhất thì nó giảm đi biến Balance.
  2. Unit thứ hai là sẽ văng exception.

Mỗi một Unit Test là một đoạn code sẽ gọi một trong hai phương thức trên rồi kiểm tra xem có đúng kết quả giả định mong muốn hay không? Rồi đánh giá test đó fail hay pass.

Tại sao phải viết Unit Test

  • Ai trong dân dev chúng ta đều đã từng phát triển một tính năng phần mềm nào đó. Bạn đã bao giờ gặp trường hợp khi thi công một tính năng xong và kiểm tra chúng trên giao diện okie bằng cách nhập liệu tất cả những trường hợp bạn có thể biết? Và một thời gian sau, bạn cần phải thi công một tính năng gì đó và bạn nghi rằng nó có thể ảnh hưởng đến tính năng cũ? Vậy làm sao để nhớ lại tất cả những case bạn đã từng test trên UI của tính năng cũ để kiểm tra lại xem tính năng mới có ảnh hưởng đến tính năng cũ hay không vì không có chỗ nào ghi nhớ cả? => Nếu không có Unit Test thì bạn cũng mất kha khá thời gian và dễ sai sót, Unit test sẽ giúp bạn giải quyết vấn đề này.
  • Việc viết unit test sẽ giúp method bao quát được các trường hợp, ví dụ một người dev đọc hàm của bạn họ sẽ có thể hiểu được logic hàm của hàm đó.
  • Việc chạy tất cả các trường hợp của Unit Test cũng không mất nhiều thời gian, thậm chí chạy cả hàng trăm test case chỉ mất vài phút, giúp tiết kiệm thời gian.
  • Việc sử dụng Unit test giúp kiểm tra độc lập, không phụ thuộc vào yếu tố thực như thời gian, cơ sở dữ liệu, máy chủ, hệ thống mạng...

Như nào là một bài kiểm tra đơn vị tốt

Một bài kiểm tra đơn vị tốt có các thuộc tính sau:

  • Nó phải được tự động hóa và có thể lặp lại.
  • Nó phải dễ thực hiện.
  • Bất kỳ ai cũng có thể chạy nó chỉ bằng một nút nhấn.
  • Nó sẽ chạy nhanh.
  • Nó phải nhất quán về kết quả (luôn trả về cùng một kết quả nếu bạn không thay đổi bất cứ điều gì giữa các lần chạy).
  • Nó phải được độc lập (chạy độc lập với các thử nghiệm khác).
  • Khi xảy ra lỗi, cần dễ dàng phát hiện những gì được mong đợi và in ra được vấn đề.

Khi viết Unit Test có một số câu hỏi dev cần tự hỏi đề viết một unit test chất lượng:

  • Tôi có thể chạy và nhận kết quả từ bài kiểm tra đơn vị mà tôi đã viết cách đây nhiều tuần, tháng hoặc năm không?
  • Các thành viên nào trong dự án của tôi có thể chạy và nhận kết quả từ các bài kiểm tra đơn vị mà tôi đã viết vài tháng trước không?
  • Tôi có thể chạy tất cả các bài kiểm tra đơn vị mà tôi đã viết trong thời gian không quá vài phút không?
  • Tôi có thể chạy tất cả các bài kiểm tra đơn vị mà tôi đã viết chỉ bằng một nút nhấn không?
  • Tôi có thể viết một bài kiểm tra cơ bản trong thời gian không quá vài phút không?

Nếu một unit test của bạn đáp ứng được tất cả câu hỏi trên, chúng mừng bạn đã có một Unit Test chất lượng rồi đấy.

Kết luận

Chúng ta đã đi qua khái niệm Unit Test. Bài sau chúng ta sẽ tìm hiểu về công cụ để có thể viết một Unit Test, ở đây tôi lựa chọn NUnitNSubtitue. Trong bài tiếp theo ta sẽ tìm hiểu về chúng.

Contact

Facebook: hcphi

Bình luận

Bài viết tương tự

- vừa được xem lúc

Các loại tham chiếu Nullable trong C# (Phần 1)

1. Giới thiệu. C# 8.0 giới thiệu kiểu tham chiếu nullable và kiểu tham chiếu non-nullable cho phép bạn đưa ra các lựa chọn quan trọng về thuộc tính cho các biến kiểu tham chiếu:.

0 0 36

- vừa được xem lúc

Command pattern qua ví dụ !

Command pattern là gì . Command pattern khá phổ biến trong C #, đặc biệt khi chúng ta muốn trì hoãn hoặc xếp hàng đợi việc thực hiện một yêu cầu hoặc khi chúng ta muốn theo dõi các hoạt động. Hơn nữa, chúng ta có thể hoàn tác tác chúng. .

0 0 178

- vừa được xem lúc

Hiểu Liskov Substitution Principle qua ví dụ !

Liskov Substitution Principle là gì . Nguyên tắc đóng mở xác đinh rằng các instance của lớp con có thể thay thế được instance lớp cha mà vẫn đảm bảo tính đúng đắn của chương trình.

0 0 24

- vừa được xem lúc

Creating custom Controls Wpf

Introduction. Wpf/winforms provides various controls like Buttons, Textbox, TextBlock, Labels etc.

0 0 41

- vừa được xem lúc

[P1] Chọn công nghệ nào để xây dựng website?

Hiện nay nhu cầu phát triển website, app tăng rất cao do xu hướng "số hóa 4.0" trong và ngoài nước.

0 0 71

- vừa được xem lúc

Kiểu dữ liệu trong C#

Dẫn nhập. Ở bài BIẾN TRONG C# chúng ta đã tìm hiểu về biến và có một thành phần không thể thiếu khi khai báo biến – Đó là kiểu dữ liệu.

0 0 24