Kiểm tra đơn vị trong python là gì?

Làm quen với việc viết mã kiểm tra và chạy song song mã này hiện được coi là một thói quen tốt. Được sử dụng một cách khôn ngoan, phương pháp này giúp xác định ý định mã của bạn chính xác hơn và có kiến ​​trúc tách biệt hơn

Một số quy tắc kiểm thử chung

  • Một đơn vị thử nghiệm nên tập trung vào một chức năng nhỏ và chứng minh nó đúng
  • Mỗi đơn vị thử nghiệm phải hoàn toàn độc lập. Mỗi thử nghiệm phải có khả năng chạy một mình và cả trong bộ thử nghiệm, bất kể thứ tự mà chúng được gọi. Hàm ý của quy tắc này là mỗi thử nghiệm phải được tải với một tập dữ liệu mới và có thể phải thực hiện một số thao tác dọn dẹp sau đó. Điều này thường được xử lý bằng phương pháp
    def square[x]:
        """Return the square of x.
    
        >>> square[2]
        4
        >>> square[-2]
        4
        """
    
        return x * x
    
    if __name__ == '__main__':
        import doctest
        doctest.testmod[]
    
    2 và
    def square[x]:
        """Return the square of x.
    
        >>> square[2]
        4
        >>> square[-2]
        4
        """
    
        return x * x
    
    if __name__ == '__main__':
        import doctest
        doctest.testmod[]
    
    3
  • Cố gắng hết sức để thực hiện các bài kiểm tra chạy nhanh. Nếu một bài kiểm tra đơn lẻ cần nhiều hơn một vài mili giây để chạy, quá trình phát triển sẽ bị chậm lại hoặc các bài kiểm tra sẽ không được chạy thường xuyên như mong muốn. Trong một số trường hợp, các bài kiểm tra không thể nhanh vì chúng cần một cấu trúc dữ liệu phức tạp để hoạt động và cấu trúc dữ liệu này phải được tải mỗi khi chạy thử nghiệm. Giữ các bài kiểm tra nặng hơn này trong một bộ kiểm tra riêng biệt được chạy bởi một số tác vụ đã lên lịch và chạy tất cả các bài kiểm tra khác thường xuyên nếu cần
  • Tìm hiểu các công cụ của bạn và tìm hiểu cách chạy thử nghiệm đơn lẻ hoặc trường hợp thử nghiệm. Sau đó, khi phát triển một chức năng bên trong mô-đun, hãy chạy thử nghiệm chức năng này thường xuyên, lý tưởng nhất là chạy tự động khi bạn lưu mã
  • Luôn chạy bộ thử nghiệm đầy đủ trước phiên viết mã và chạy lại sau. Điều này sẽ giúp bạn tự tin hơn rằng bạn đã không vi phạm bất cứ điều gì trong phần còn lại của mã
  • Bạn nên triển khai hook chạy tất cả các thử nghiệm trước khi đẩy mã vào kho lưu trữ dùng chung
  • Nếu bạn đang ở giữa một phiên phát triển và phải gián đoạn công việc của mình, bạn nên viết một bài kiểm tra đơn vị bị hỏng về những gì bạn muốn phát triển tiếp theo. Khi quay lại làm việc, bạn sẽ có một con trỏ đến nơi bạn đã làm và quay lại đúng hướng nhanh hơn
  • Bước đầu tiên khi bạn gỡ lỗi mã của mình là viết một bài kiểm tra mới xác định lỗi. Mặc dù không phải lúc nào cũng có thể thực hiện được, nhưng những bài kiểm tra bắt lỗi đó là một trong những đoạn mã có giá trị nhất trong dự án của bạn
  • Sử dụng tên dài và mô tả cho các chức năng thử nghiệm. Hướng dẫn về phong cách ở đây hơi khác so với hướng dẫn về mã đang chạy, trong đó các tên ngắn thường được ưu tiên. Lý do là các chức năng kiểm tra không bao giờ được gọi một cách rõ ràng.
    def square[x]:
        """Return the square of x.
    
        >>> square[2]
        4
        >>> square[-2]
        4
        """
    
        return x * x
    
    if __name__ == '__main__':
        import doctest
        doctest.testmod[]
    
    4 hoặc thậm chí
    def square[x]:
        """Return the square of x.
    
        >>> square[2]
        4
        >>> square[-2]
        4
        """
    
        return x * x
    
    if __name__ == '__main__':
        import doctest
        doctest.testmod[]
    
    5 đều ổn khi chạy mã, nhưng trong mã kiểm tra, bạn sẽ có các tên như
    def square[x]:
        """Return the square of x.
    
        >>> square[2]
        4
        >>> square[-2]
        4
        """
    
        return x * x
    
    if __name__ == '__main__':
        import doctest
        doctest.testmod[]
    
    6,
    def square[x]:
        """Return the square of x.
    
        >>> square[2]
        4
        >>> square[-2]
        4
        """
    
        return x * x
    
    if __name__ == '__main__':
        import doctest
        doctest.testmod[]
    
    7. Các tên chức năng này được hiển thị khi thử nghiệm không thành công và phải mang tính mô tả nhất có thể
  • Khi xảy ra sự cố hoặc phải thay đổi và nếu mã của bạn có một bộ kiểm tra tốt, bạn hoặc những người bảo trì khác sẽ chủ yếu dựa vào bộ kiểm tra để khắc phục sự cố hoặc sửa đổi một hành vi nhất định. Do đó, mã kiểm tra sẽ được đọc nhiều bằng hoặc thậm chí nhiều hơn mã đang chạy. Một bài kiểm tra đơn vị có mục đích không rõ ràng không hữu ích lắm trong trường hợp này
  • Một cách sử dụng khác của mã thử nghiệm là để giới thiệu cho các nhà phát triển mới. Khi ai đó sẽ phải làm việc trên cơ sở mã, việc chạy và đọc mã kiểm tra liên quan thường là điều tốt nhất họ có thể làm để bắt đầu. Họ sẽ hoặc nên phát hiện ra những điểm nóng, nơi phát sinh nhiều khó khăn nhất và các trường hợp khó khăn nhất. Nếu họ phải thêm một số chức năng, thì bước đầu tiên là thêm thử nghiệm để đảm bảo rằng chức năng mới chưa phải là đường dẫn hoạt động chưa được cắm vào giao diện

Những thứ cơ bản¶

đơn vị nhất¶

def square[x]:
    """Return the square of x.

    >>> square[2]
    4
    >>> square[-2]
    4
    """

    return x * x

if __name__ == '__main__':
    import doctest
    doctest.testmod[]
8 là mô-đun thử nghiệm đi kèm pin trong thư viện chuẩn Python. API của nó sẽ quen thuộc với bất kỳ ai đã sử dụng bất kỳ loạt công cụ JUnit/nUnit/CppUnit nào

Tạo các trường hợp thử nghiệm được thực hiện bằng cách phân lớp

def square[x]:
    """Return the square of x.

    >>> square[2]
    4
    >>> square[-2]
    4
    """

    return x * x

if __name__ == '__main__':
    import doctest
    doctest.testmod[]
9

________số 8

Kể từ Python 2. 7 unittest cũng bao gồm các cơ chế khám phá thử nghiệm của riêng nó

unittest trong tài liệu thư viện chuẩn

Tiến sĩ¶

Mô-đun

$ pip install pytest
0 tìm kiếm các đoạn văn bản trông giống như các phiên Python tương tác trong tài liệu, sau đó thực thi các phiên đó để xác minh rằng chúng hoạt động chính xác như được hiển thị

Doctests có trường hợp sử dụng khác với các bài kiểm tra đơn vị thích hợp. chúng thường ít chi tiết hơn và không nắm bắt được các trường hợp đặc biệt hoặc các lỗi hồi quy khó hiểu. Chúng hữu ích như một tài liệu rõ ràng về các trường hợp sử dụng chính của một mô-đun và các thành phần của nó. Tuy nhiên, doctests sẽ tự động chạy mỗi khi bộ kiểm tra đầy đủ chạy

Một doctest đơn giản trong một chức năng

def square[x]:
    """Return the square of x.

    >>> square[2]
    4
    >>> square[-2]
    4
    """

    return x * x

if __name__ == '__main__':
    import doctest
    doctest.testmod[]

Khi chạy mô-đun này từ dòng lệnh như trong

$ pip install pytest
1, các tài liệu sẽ chạy và khiếu nại nếu có bất kỳ điều gì không hoạt động như được mô tả trong các tài liệu

Công cụ¶

py. kiểm tra¶

py. test là một giải pháp thay thế không có sẵn cho mô-đun unittest tiêu chuẩn của Python

$ pip install pytest

Mặc dù là một công cụ kiểm tra đầy đủ tính năng và có thể mở rộng, nhưng nó có một cú pháp đơn giản. Tạo một bộ thử nghiệm dễ dàng như viết một mô-đun với một vài chức năng

def square[x]:
    """Return the square of x.

    >>> square[2]
    4
    >>> square[-2]
    4
    """

    return x * x

if __name__ == '__main__':
    import doctest
    doctest.testmod[]
3

và sau đó chạy py. lệnh kiểm tra

def square[x]:
    """Return the square of x.

    >>> square[2]
    4
    >>> square[-2]
    4
    """

    return x * x

if __name__ == '__main__':
    import doctest
    doctest.testmod[]
4

ít công việc hơn nhiều so với yêu cầu đối với chức năng tương đương với mô-đun unittest

py. kiểm tra

Giả thuyết¶

Giả thuyết là một thư viện cho phép bạn viết các bài kiểm tra được tham số hóa bởi một nguồn ví dụ. Sau đó, nó tạo ra các ví dụ đơn giản và dễ hiểu khiến bài kiểm tra của bạn không thành công, cho phép bạn tìm thấy nhiều lỗi hơn với ít công việc hơn

def square[x]:
    """Return the square of x.

    >>> square[2]
    4
    >>> square[-2]
    4
    """

    return x * x

if __name__ == '__main__':
    import doctest
    doctest.testmod[]
5

Ví dụ: kiểm tra danh sách float sẽ thử nhiều ví dụ, nhưng báo cáo ví dụ tối thiểu của từng lỗi [loại và vị trí ngoại lệ được phân biệt]

def square[x]:
    """Return the square of x.

    >>> square[2]
    4
    >>> square[-2]
    4
    """

    return x * x

if __name__ == '__main__':
    import doctest
    doctest.testmod[]
6

def square[x]:
    """Return the square of x.

    >>> square[2]
    4
    >>> square[-2]
    4
    """

    return x * x

if __name__ == '__main__':
    import doctest
    doctest.testmod[]
7

Giả thuyết là thực tế cũng như rất mạnh mẽ và thường sẽ tìm thấy các lỗi thoát khỏi tất cả các hình thức thử nghiệm khác. Nó tích hợp tốt với py. thử nghiệm và tập trung mạnh vào khả năng sử dụng trong cả các tình huống đơn giản và nâng cao

giả thuyết

độc tố¶

tox là một công cụ để tự động hóa việc quản lý và kiểm tra môi trường thử nghiệm đối với nhiều cấu hình trình thông dịch

def square[x]:
    """Return the square of x.

    >>> square[2]
    4
    >>> square[-2]
    4
    """

    return x * x

if __name__ == '__main__':
    import doctest
    doctest.testmod[]
8

tox cho phép bạn định cấu hình ma trận kiểm tra đa thông số phức tạp thông qua tệp cấu hình kiểu INI đơn giản

chất độc

chế nhạo¶

$ pip install pytest
2 là một thư viện để thử nghiệm bằng Python. Kể từ Python 3. 3, nó có sẵn trong thư viện tiêu chuẩn

Đối với các phiên bản Python cũ hơn

def square[x]:
    """Return the square of x.

    >>> square[2]
    4
    >>> square[-2]
    4
    """

    return x * x

if __name__ == '__main__':
    import doctest
    doctest.testmod[]
0

Nó cho phép bạn thay thế các phần của hệ thống đang thử nghiệm bằng các đối tượng giả và đưa ra xác nhận về cách chúng đã được sử dụng

Ví dụ: bạn có thể vá một phương thức

def square[x]:
    """Return the square of x.

    >>> square[2]
    4
    >>> square[-2]
    4
    """

    return x * x

if __name__ == '__main__':
    import doctest
    doctest.testmod[]
0

Để mô phỏng các lớp hoặc đối tượng trong một mô-đun đang được kiểm tra, hãy sử dụng trình trang trí

$ pip install pytest
3. Trong ví dụ dưới đây, một hệ thống tìm kiếm bên ngoài được thay thế bằng một mô hình luôn trả về cùng một kết quả [nhưng chỉ trong khoảng thời gian thử nghiệm]

Ý nghĩa của bài kiểm tra đơn vị là gì?

Kiểm tra đơn vị là một cách kiểm tra đơn vị - đoạn mã nhỏ nhất có thể được tách biệt một cách logic trong hệ thống . Trong hầu hết các ngôn ngữ lập trình, đó là hàm, chương trình con, phương thức hoặc thuộc tính. Phần biệt lập của định nghĩa là quan trọng.

Mục đích của thử nghiệm đơn vị Python là gì?

Mục tiêu của thử nghiệm đơn vị python là để phát hiện càng nhiều lỗi và sự không nhất quán trong giai đoạn phát triển ứng dụng sơ khai càng tốt . Điều này đạt được bằng cách thiết kế và viết kịch bản các bài kiểm tra đơn vị chất lượng và chính xác cũng có thể đóng vai trò là tài liệu chi tiết cho quy trình phát triển.

Các công cụ kiểm tra đơn vị cho Python là gì?

6 khung kiểm thử Python TỐT NHẤT [Danh sách cập nhật năm 2022] .
So sánh các công cụ kiểm tra Python
#1] Người máy
#2] Kiểm tra Py
#3] Đơn vị nhất
#4] Tài liệu kiểm tra
#5] Mũi2
#6] Làm chứng
Khung kiểm tra Python bổ sung

Python có thử nghiệm đơn vị không?

unittest đã được tích hợp vào thư viện chuẩn Python kể từ phiên bản 2. 1 . Bạn có thể sẽ thấy nó trong các ứng dụng Python thương mại và các dự án mã nguồn mở. unittest chứa cả khung thử nghiệm và trình chạy thử nghiệm. unittest có một số yêu cầu quan trọng để viết và thực hiện các bài kiểm tra.

Chủ Đề