paint-brush
Hiểu đơn vị kiểm tra bằng Pythontừ tác giả@terieyenike
2,919 lượt đọc
2,919 lượt đọc

Hiểu đơn vị kiểm tra bằng Python

từ tác giả Teri Eyenike6m2022/09/04
Read on Terminal Reader
Read this story w/o Javascript

dài quá đọc không nổi

Kiểm tra mã của bạn là một phần quan trọng của vòng đời phát triển phần mềm và nó luôn phải đến trước khi triển khai ứng dụng vào sản xuất. Các bài kiểm tra đơn vị là các chương trình logic mà một lập trình viên viết để kiểm tra một cơ sở mã. Thử nghiệm rất quan trọng vì nó giúp theo dõi và tìm ra lỗi trong mã. Bài viết này sẽ dạy bạn cách viết các bài kiểm tra cơ bản bằng cách sử dụng các bài kiểm tra đơn vị Python để kiểm tra xem mã của bạn đạt hay không trong quá trình kiểm tra. Mục đích chính của kiểm thử đơn vị là để kiểm tra xem tất cả các chức năng mã có hoạt động như mong đợi hay không.
featured image - Hiểu đơn vị kiểm tra bằng Python
Teri Eyenike HackerNoon profile picture


Kiểm tra mã của bạn là một phần quan trọng của vòng đời phát triển phần mềm và nó luôn phải đến trước khi triển khai ứng dụng vào sản xuất. Kiểm tra là rất quan trọng vì nó giúp theo dõi và tìm ra lỗi trong mã.


Kiểm tra là một phương pháp kiểm tra các đơn vị mã nguồn riêng lẻ để xác nhận rằng nó hoạt động tối ưu trước khi vận chuyển mã đến nơi sản xuất. Điều quan trọng cần lưu ý là việc triển khai tệp nguồn vào sản xuất cho người dùng là không cần thiết trong quá trình thử nghiệm đơn vị.


Sẽ là tốt nhất nếu bạn cũng nhớ rằng thử nghiệm không dành riêng cho Python.


Bài viết này sẽ dạy bạn cách viết các bài kiểm tra cơ bản bằng cách sử dụng các bài kiểm tra đơn vị Python để kiểm tra xem mã của bạn đạt hay không trong quá trình kiểm tra.


Điều kiện tiên quyết

Để hoàn thành hướng dẫn này, bạn cần những điều sau:

  • Kiến thức viết mã Python
  • Một cài đặt của Chương trình Python trên máy cục bộ của bạn
  • Một trình soạn thảo mã do bạn lựa chọn


Bắt đầu

Kiểm tra viết là các chương trình logic mà một lập trình viên viết để kiểm tra cơ sở mã. Trong quá trình phát triển, QA nên hiểu quy trình để làm nổi bật những gì cần cải thiện trong ứng dụng trước khi vận chuyển sản phẩm cho người dùng. Với mục đích này, hãy viết một hàm tính tổng hai số và trả về kết quả.

Để bắt đầu, hãy tạo một thư mục chứa tất cả các tệp để viết bài kiểm tra trong hướng dẫn này. Thêm tệp có tên main.py để viết hàm trong thư mục mới này.


 # main.py # Add the sum of two numbers def add_sum(num1, num2): return int(num1) + int(num2)


Bây giờ chúng ta có khối mã ở trên, hãy kiểm tra xem mã có hoạt động hay không bằng cách viết một hàm cho phép người dùng nhập giá trị mong muốn của họ thông qua dấu nhắc đầu vào. Hàm add_sum() nhận hai số làm tham số và trả về giá trị bằng cách sử dụng toán tử + dấu để lấy tổng. Trong một tệp khác, result.py , sao chép và dán mã sau:


 # result.py from main import add_sum print("Please enter the two values\n") num1 = int(input("Please enter the first number: \n")) num2 = int(input("Please enter the second number: \n")) total = add_sum(num1, num2) print(f"The sum of the values is {total}")


Khối mã này thực hiện những việc sau:

  • Nhập add_sum() từ main.py
  • đã chuyển đổi giá trị dấu nhắc đầu vào thành một số nguyên bằng cách sử dụng phương thức int
  • tính tổng các giá trị in ra tổng của nó bằng cách sử dụng chuỗi f (cú pháp định dạng) để lấy kết quả


Bài kiểm tra đơn vị và trường hợp kiểm thử là gì?

Python đi kèm với một mô-đun thư viện tiêu chuẩn được tích hợp sẵn được gọi là unittest, cung cấp các công cụ để xây dựng và chạy các bài kiểm tra cho mã của bạn. Mục đích chính của kiểm thử đơn vị là để kiểm tra xem tất cả các chức năng mã có hoạt động như mong đợi hay không.


Trường hợp thử nghiệm là một cách tiêu chuẩn để làm việc với một trường hợp thử nghiệm duy nhất, với các chức năng có sẵn trong lớp tên thử nghiệm. Ngoài ra, một trường hợp thử nghiệm là điều cần thiết trong mã thành phần cho thử nghiệm đơn vị riêng lẻ. Nó sử dụng các phương pháp xác nhận khác nhau để kiểm tra và báo cáo lỗi ngay sau khi chạy mã.


Vượt qua bài kiểm tra

Phần này là tất cả về việc viết một loạt các bài kiểm tra.


Trước khi tạo tệp thử nghiệm để viết tất cả các trường hợp thử nghiệm cho hàm add_sum() , hãy cập nhật main.py Sao chép và dán mã sau:

 # main.py def add_sum(num1, num2): try: return int(num1) + int(num2) except ValueError as err: return err


Khối mã sử dụng câu lệnh try/except để xử lý các ngoại lệ trong mã của bạn cảnh báo cho bạn nếu có lỗi trong khối ngoại trừ. Phương pháp này trong lập trình giúp bắt lỗi và chỉ cho bạn số dòng cụ thể nơi xảy ra lỗi.


Bây giờ, hãy tạo một tệp thử nghiệm trong cùng một thư mục có tên là test.py. Trong tệp này, sao chép và dán mã sau:


 # test.py import unittest from main import add_sum class MainTest(unittest.TestCase): def test_do_stuff(self): result = add_sum(5, 10) self.assertEqual(result, 15) if __name__ == '__main__': unittest.main()


Như được hiển thị trong khối mã ở trên, điều sau xảy ra:

  • Nhập chức năng và chức năng mới nhất mà bạn muốn kiểm tra (nó đến từ main.py)
  • Unittest hoạt động bằng cách tạo một lớp chứa các bài kiểm tra cho hàm add_sum (), hàm này kế thừa bên trong lớp những gì mà unittest mang lại, đó là Unittest.
  • Xác định một hàm với từ khóa self trong test_do_stuff () đại diện cho thể hiện của lớp
  • Trong phương thức kiểm tra test_do_stuff (), khai báo một biến và chuyển vào hai đối số có giá trị khác nhau
  • Dòng cuối cùng sử dụng phương thức khẳng định duy nhất, khẳng địnhEqual, phương thức này xác minh rằng các đối số bạn chuyển từ biến kết quả khớp với kết quả bạn mong đợi nhận được
  • Cuối cùng, chạy toàn bộ tệp thử nghiệm với unittest.main ()


Hãy nhớ bắt đầu mọi phương pháp với “test_” vì test.py chạy tự động. **
**


Bất cứ khi nào bạn chạy kiểm tra, tất cả các kiểm tra dự kiến sẽ vượt qua với thông báo OK trong bảng điều khiển, có nghĩa là nó đã thành công.


 Ran 1 test in 0.000s OK


Thi trượt

Trong quá trình phát triển và thử nghiệm, nên có các tình huống thất bại. Làm điều này cho thấy rằng mọi chương trình đều có lỗ hổng và lỗi.


Trong cùng một tệp, test.py , hãy sửa đổi mã và dán vào như sau:


 # test.py import unittest from main import add_sum class MainTest(unittest.TestCase): # other test def test_do_stuff2(self): result = add_sum("hulu", 5) self.assertEqual(result, 5) if __name__ == '__main__': unittest.main()


Kết quả từ việc chạy mã này trông giống như sau:


 FAIL: test_do_stuff2 (__main__.MainTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "test.py", line 11, in test_do_stuff3 self.assertEqual(result, 5) AssertionError: ValueError("invalid literal for int() with base 10: 'hulu'") != 5


Từ kết quả đầu ra ở trên, có thể khắc phục sự cố sau bằng cách đọc mã lỗi và sửa mã cho phù hợp:

  • Lỗi xảy ra trên một số dòng cụ thể, yêu cầu bạn kiểm tra và giải quyết số dòng.
  • Tiếp theo là lỗi xác nhận, gây ra lỗi giá trị biểu thị rằng chuỗi 'hulu' không phải là một ký tự hợp lệ, biết rằng trong tệp main.py, hai giá trị có kiểu int
  • Với bước này, bạn biết những gì cần sửa để làm cho mã chạy thử nghiệm OK với các giá trị chính xác để vượt qua để làm cho mã thành công.


Chạy mã

Khi bạn tạo nhiều tệp và mô-đun khác nhau và bạn cần kiểm tra tất cả chúng đồng thời thay vì thử mặc định một tệp, bạn có thể sử dụng lệnh này để chạy tất cả các kiểm tra đồng thời.


 python3 -m unittest


Ngoài ra, để biết thêm chi tiết về bài kiểm tra, hãy sử dụng lệnh với cờ -v (verbose), hiển thị cho bạn các bài kiểm tra OK và bài kiểm tra không thành công.


 python3 -m unittest -v


Kết quả trông giống như sau:


 test_do_stuff (test.MainTest) ... ok test_do_stuff2 (test.MainTest) ... ok ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK


Sự kết luận

Kiểm tra đơn vị nên được thực hiện bởi các QAs và các nhà phát triển liên quan đến việc viết và gửi mã bất cứ khi nào một tính năng mới được phát hành trước khi người dùng sử dụng ứng dụng. Thực hiện các bài kiểm tra thường xuyên hoặc định kỳ không phải là một suy nghĩ muộn màng mà là xây dựng niềm tin vào cách ứng dụng hoạt động hiệu quả và hoạt động.


Bài viết này đã cung cấp cho bạn tổng quan về lý do tại sao các bài kiểm tra lại cần thiết trong quá trình phát triển và cách sử dụng các bài kiểm tra đơn vị để kiểm tra chức năng mã và đáp ứng thông số kỹ thuật tiêu chuẩn cho người dùng trước khi triển khai đến sản xuất.


Tìm hiểu thêm