Kiểm tra đơn vị với Mô-đun đơn nhất Python

Spread the love

Không có nhà phát triển giỏi nào triển khai mã mà không thử nghiệm kỹ lưỡng. Kiểm thử đơn vị là quá trình kiểm tra các mô-đun riêng lẻ của một chương trình lớn.

Bài viết này sẽ thảo luận về cách bạn có thể thực hiện kiểm tra đơn vị mã của mình bằng cách sử dụng mô-đun đơn nhất Python. Trước tiên, chúng ta hãy hiểu các loại thử nghiệm là gì.

Khi nói đến thử nghiệm, có thử nghiệm thủ công và thử nghiệm tự động. Kiểm thử thủ công là một kỹ thuật kiểm tra trong đó con người thực hiện kiểm tra theo cách thủ công sau khi hoàn thành quá trình phát triển. Kiểm thử tự động là một kỹ thuật kiểm tra trong đó các chương trình thực hiện kiểm tra một cách tự động và cung cấp kết quả cho chúng tôi.

Bạn có thể hiểu rằng kiểm tra thủ công tốn nhiều thời gian và khó thực hiện. Vì vậy, các nhà phát triển viết mã để thực hiện các bài kiểm tra (kiểm tra tự động). Có nhiều loại kiểm tra khác nhau trong kiểm thử tự động. Một số trong số đó là Kiểm thử đơn vị, Kiểm thử tích hợp, Kiểm tra từ đầu đến cuối, Kiểm tra căng thẳng, v.v.,

Hãy xem quy trình kiểm tra tiêu chuẩn.

  • Viết hoặc cập nhật mã.
  • Viết hoặc Cập nhật các bài kiểm tra cho các trường hợp khác nhau cho mã của bạn.
  • Chạy thử nghiệm (bằng tay hoặc sử dụng máy chạy thử nghiệm).
  • Xem kết quả thử nghiệm. Nếu có bất kỳ lỗi nào, hãy sửa chúng và lặp lại các bước.

Ở đây, chúng ta sẽ thảo luận về loại thử nghiệm cơ bản và thiết yếu nhất được gọi là thử nghiệm đơn vị. Không cần thêm bất kỳ lời khuyên nào nữa, chúng ta hãy đi sâu vào hướng dẫn thực tế.

Kiểm thử đơn vị là gì?

Kiểm thử đơn vị là một kỹ thuật để kiểm tra một khối nhỏ mã độc lập. Mã khối nhỏ sẽ là một hàm trong hầu hết các trường hợp. Từ độc lập có nghĩa là nó không phụ thuộc vào các đoạn mã khác trong dự án.

Giả sử chúng ta phải kiểm tra xem một chuỗi có bằng “techpoe.com” hay không. Vì vậy, chúng tôi đã viết một hàm nhận một đối số và trả về liệu nó có bằng “techpoe.com” hay không.

def is_equal_to_geekflare(string):
	return string == "techpoe.com"

Hàm trên không có phụ thuộc vào bất kỳ mã nào khác. Vì vậy, chúng tôi có thể kiểm tra nó một cách độc lập bằng cách đưa ra các đầu vào khác nhau. Đoạn mã độc lập có thể được sử dụng trong toàn bộ dự án.

Tầm quan trọng của Kiểm thử đơn vị

Nói chung, mã khối độc lập có thể được sử dụng trong toàn bộ dự án. Vì vậy, nó phải được viết và thử nghiệm tốt. Bài kiểm tra đơn vị là bài kiểm tra được sử dụng để kiểm tra các loại khối mã độc lập đó. Điều gì xảy ra nếu chúng ta không sử dụng các bài kiểm tra đơn vị cho dự án của mình?

  9 công cụ quản lý bản vá thay thế WSUS tốt nhất của Microsoft dành cho SMB

Hãy giả sử rằng chúng tôi đã không kiểm tra các khối mã nhỏ được sử dụng trong toàn bộ dự án. Tất cả các bài kiểm tra khác như kiểm tra tích hợp, kiểm tra đầu cuối, v.v., sử dụng các khối mã nhỏ khác có thể không thành công. Điều này phá vỡ ứng dụng. Đó là lý do tại sao các khối xây dựng cơ bản của mã phải được kiểm tra tốt.

Giờ đây, chúng ta biết tầm quan trọng của kiểm thử đơn vị và kiểm thử đơn vị đã viết cho tất cả các khối mã độc lập. Vì chúng tôi đã thực hiện các bài kiểm tra đơn vị, các bài kiểm tra khác như kiểm tra tích hợp, kiểm tra end-to-end, v.v., sẽ không thất bại vì khối mã độc lập.

Trong các phần tiếp theo, chúng ta sẽ xem mô-đun đơn nhất trong Python là gì và cách chúng tôi sử dụng mô-đun đơn vị nhất để viết các bài kiểm tra đơn vị bằng Python.

Lưu ý: Chúng tôi giả định rằng bạn đã quen thuộc với các lớp Python, mô-đun, v.v. Nếu bạn không quen với các khái niệm trung gian của Python như lớp, mô-đun, v.v., bạn có thể cảm thấy khó hiểu các phần tiếp theo.

Python là gì?

Python unittest là một khung thử nghiệm được tích hợp sẵn để kiểm tra mã Python. Nó có một trình chạy thử nghiệm, cho phép chúng tôi chạy các thử nghiệm mà không cần nỗ lực nhiều. Vì vậy, chúng tôi có thể sử dụng mô-đun đơn nhất được tích hợp sẵn để thử nghiệm mà không cần sử dụng mô-đun của bên thứ ba. Tuy nhiên, nó thay đổi dựa trên yêu cầu của bạn. Mô-đun đơn nhất được tích hợp sẵn rất tốt để bắt đầu thử nghiệm bằng Python.

Chúng tôi phải làm theo các bước dưới đây để kiểm tra mã Python bằng cách sử dụng mô-đun mới nhất.

# 1. Viết mã.

# 2. Nhập mô-đun mới nhất.

# 3. Tạo một tệp bắt đầu bằng kiểm tra từ khóa. Ví dụ: test_prime.py. Kiểm tra từ khóa được sử dụng để xác định các tệp kiểm tra.

#4. Tạo một lớp mở rộng lớp Unittest.TestCase.

# 5. Viết các phương thức (kiểm tra) bên trong lớp. Mỗi phương pháp chứa các trường hợp thử nghiệm khác nhau dựa trên yêu cầu của bạn. Chúng ta phải đặt tên phương thức bắt đầu bằng từ khóa test.

# 6. Chạy các bài kiểm tra. Chúng tôi có thể chạy các bài kiểm tra theo nhiều cách khác nhau.

  • Chạy lệnh python -m unittest test_filename.py.
  • Chúng tôi chạy các tệp thử nghiệm như tệp Python chung bằng lệnh python test_filename.py. Để phương thức này hoạt động, chúng ta cần gọi phương thức chính của phương thức mới nhất trong tệp thử nghiệm.
  • Và cuối cùng, sử dụng tính năng khám phá. Chúng tôi có thể tự động chạy các bài kiểm tra bằng cách sử dụng lệnh python -m unittest Discover mà không cần đề cập đến tên tệp của bài kiểm tra. Nó sẽ tìm các bài kiểm tra bằng cách sử dụng quy ước đặt tên mà chúng tôi đã tuân theo. Vì vậy, chúng tôi phải đặt tên cho các tệp thử nghiệm của mình với thử nghiệm từ khóa khi bắt đầu.
  Làm thế nào để sử dụng các lý thuyết về động lực trong công việc

Nói chung, trong thử nghiệm, chúng tôi so sánh đầu ra của mã với đầu ra mong đợi. Vì vậy, để so sánh các kết quả đầu ra đơn nhất cung cấp các phương pháp khác nhau. Bạn có thể tìm thấy danh sách các chức năng so sánh nơi đây.

Bạn có thể dễ dàng hiểu chúng mà không gặp bất kỳ khó khăn nào. Họ thẳng thắn.

Đó là rất nhiều lý thuyết. Bây giờ chúng ta phải bắt đầu viết mã.

Lưu ý: Nếu bạn có bất kỳ câu hỏi nào về mô-đun mới nhất, bạn có thể truy cập tài liệu và xóa những nghi ngờ của bạn. Không có bất kỳ sự chậm trễ nào nữa, hãy sử dụng mô-đun đơn nhất.

Bài kiểm tra đơn vị bằng Python bằng cách sử dụng đơn vị nhất

Chúng tôi sẽ viết một số hàm trước, và sau đó chúng tôi sẽ tập trung vào việc viết các bài kiểm tra. Đầu tiên, hãy mở một thư mục trong trình soạn thảo mã yêu thích của bạn. Và tạo một tệp có tên utils.py. Dán mã sau vào tệp.

import math


def is_prime(n):
    if n < 0:
        return 'Negative numbers are not allowed'

    if n <= 1:
        return False

    if n == 2:
        return True

    if n % 2 == 0:
        return False

    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True


def cubic(a):
    return a * a * a


def say_hello(name):
    return "Hello, " + name

Chúng tôi có ba chức năng khác nhau trong tệp utils.py. Bây giờ, chúng ta phải kiểm tra từng chức năng với các trường hợp thử nghiệm khác nhau. Hãy viết các bài kiểm tra cho hàm is_prime đầu tiên.

# 1. Tạo một tệp có tên test_utils.py trong thư mục mẫu với tên utils.py.

# 2. Nhập các mô-đun utils và đơn nhất.

# 3. Tạo một lớp với tên TestUtils mở rộng lớp Unittest.TestCase. Tên của lớp có thể là bất cứ thứ gì. Cố gắng đặt cho lớp một cái tên có ý nghĩa.

#4. Bên trong lớp, hãy viết một phương thức gọi là test_is_prime chấp nhận self làm đối số.

# 5. Viết các trường hợp thử nghiệm khác nhau với các đối số cho is_prime và so sánh đầu ra với đầu ra mong đợi.

# 6. Ví dụ trường hợp kiểm tra self.assertFalse (utils.is_prime (1)).

# 7. Chúng tôi hy vọng đầu ra của is_prime (1) sẽ là false trong trường hợp trên.

#số 8. Tương tự như trường hợp trên, chúng tôi sẽ kiểm thử các trường hợp khác nhau dựa trên chức năng mà chúng tôi đang kiểm thử.

  Cách giảm cường độ màu trắng trên iPhone của bạn

Chúng ta hãy xem các bài kiểm tra.

import unittest

import utils


class TestUtils(unittest.TestCase):
    def test_is_prime(self):
        self.assertFalse(utils.is_prime(4))
        self.assertTrue(utils.is_prime(2))
        self.assertTrue(utils.is_prime(3))
        self.assertFalse(utils.is_prime(8))
        self.assertFalse(utils.is_prime(10))
        self.assertTrue(utils.is_prime(7))
        self.assertEqual(utils.is_prime(-3),
                         "Negative numbers are not allowed")


if __name__ == '__main__':
    unittest.main()

Chúng tôi đang gọi phương pháp chính của mô-đun hợp nhất để chạy các bài kiểm tra bằng cách sử dụng lệnh python filename.py. Bây giờ, hãy chạy các bài kiểm tra.

Bạn sẽ thấy đầu ra tương tự như đầu ra bên dưới.

$ python test_utils.py 
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK

Bây giờ, hãy thử viết các trường hợp thử nghiệm cho các hàm khác. Hãy nghĩ về các trường hợp khác nhau cho các hàm và viết các bài kiểm tra cho chúng. Hãy xem các bài kiểm tra sau được thêm vào lớp trên.

...


class TestUtils(unittest.TestCase):
    def test_is_prime(self):
        ...

    def test_cubic(self):
        self.assertEqual(utils.cubic(2), 8)
        self.assertEqual(utils.cubic(-2), -8)
        self.assertNotEqual(utils.cubic(2), 4)
        self.assertNotEqual(utils.cubic(-3), 27)

    def test_say_hello(self):
        self.assertEqual(utils.say_hello("techpoe.com"), "Hello, techpoe.com")
        self.assertEqual(utils.say_hello("Chandan"), "Hello, Chandan")
        self.assertNotEqual(utils.say_hello("Chandan"), "Hi, Chandan")
        self.assertNotEqual(utils.say_hello("Hafeez"), "Hi, Hafeez")


...

Chúng tôi chỉ sử dụng một số chức năng so sánh từ mô-đun đơn nhất. Bạn có thể tìm thấy danh sách đầy đủ nơi đây.

Chúng tôi đã học cách viết các bài kiểm tra đơn vị bằng cách sử dụng mô-đun đơn nhất. Bây giờ, đã đến lúc xem các cách khác nhau để chạy thử nghiệm.

Làm thế nào để chạy thử nghiệm bằng cách sử dụng unittest

Chúng ta đã thấy một cách để chạy các trường hợp thử nghiệm trong phần trên. Hãy xem hai cách khác để chạy các bài kiểm tra bằng cách sử dụng mô-đun đơn nhất.

# 1. Sử dụng tên tệp và mô-đun mới nhất.

Trong phương pháp này, chúng tôi sẽ sử dụng tên tệp và mô-đun đơn nhất để chạy các bài kiểm tra. Lệnh để chạy các bài kiểm tra là python -m unittest filename.py. Trong trường hợp của chúng tôi, lệnh để chạy các bài kiểm tra là python -m unittest test_utils.py.

# 2. Sử dụng phương pháp khám phá

Chúng tôi sẽ sử dụng phương pháp khám phá của mô-đun đơn nhất để tự động phát hiện tất cả các tệp thử nghiệm và chạy chúng. Để tự động phát hiện các tệp kiểm tra, chúng tôi cần đặt tên cho chúng bắt đầu bằng kiểm tra từ khóa.

Lệnh để chạy các bài kiểm tra bằng cách sử dụng phương thức khám phá là python -m unittest Discover. Lệnh sẽ phát hiện tất cả các tệp có tên bắt đầu bằng kiểm tra và thực thi chúng.

Kết luận 👩‍💻

Kiểm thử đơn vị là kiểm thử cơ bản trong thế giới lập trình. Có rất nhiều thử nghiệm khác trong thế giới thực. Cố gắng tìm hiểu chúng một lần. Tôi hy vọng hướng dẫn này sẽ giúp bạn viết các bài kiểm tra cơ bản bằng Python bằng cách sử dụng mô-đun mới nhất. Có các thư viện của bên thứ ba như pytest, Robot Framework, mũi, mũi2, dấu gạch chéo, v.v. Bạn có thể khám phá chúng dựa trên yêu cầu dự án của mình.

Chúc bạn thử nghiệm vui vẻ 😎

Bạn cũng có thể quan tâm đến Câu hỏi và câu trả lời phỏng vấn Python.

x