Bỏ qua trong python

Khung thử nghiệm đơn vị

python -m unittest tests/test_something.py
9 ban đầu được lấy cảm hứng từ JUnit và có hương vị tương tự như các khung thử nghiệm đơn vị chính trong các ngôn ngữ khác. Nó hỗ trợ tự động hóa thử nghiệm, chia sẻ mã thiết lập và tắt cho các thử nghiệm, tổng hợp các thử nghiệm thành các bộ sưu tập và tính độc lập của các thử nghiệm với khung báo cáo

Để đạt được điều này,

python -m unittest tests/test_something.py
9 hỗ trợ một số khái niệm quan trọng theo cách hướng đối tượng

lịch thi đấu

Một bộ cố định thử nghiệm thể hiện sự chuẩn bị cần thiết để thực hiện một hoặc nhiều thử nghiệm và bất kỳ hành động dọn dẹp nào có liên quan. Điều này có thể bao gồm, ví dụ, tạo cơ sở dữ liệu tạm thời hoặc proxy, thư mục hoặc khởi động quy trình máy chủ

trường hợp thử nghiệm

Một trường hợp thử nghiệm là đơn vị thử nghiệm riêng lẻ. Nó kiểm tra một phản hồi cụ thể đối với một bộ đầu vào cụ thể.

python -m unittest tests/test_something.py
9 cung cấp một lớp cơ sở,
python -m unittest -v test_module
3, có thể được sử dụng để tạo các trường hợp thử nghiệm mới

bộ kiểm tra

Bộ kiểm thử là tập hợp các trường hợp kiểm thử, bộ kiểm thử hoặc cả hai. Nó được sử dụng để tổng hợp các bài kiểm tra nên được thực hiện cùng nhau

người chạy thử

Trình chạy thử nghiệm là một thành phần điều phối việc thực hiện các thử nghiệm và cung cấp kết quả cho người dùng. Người chạy có thể sử dụng giao diện đồ họa, giao diện văn bản hoặc trả về một giá trị đặc biệt để chỉ ra kết quả thực hiện các bài kiểm tra

Xem thêm

Mô-đun
python -m unittest -v test_module
4

Một mô-đun hỗ trợ thử nghiệm khác với hương vị rất khác

Kiểm tra Smalltalk đơn giản. có hoa văn

Bài báo gốc của Kent Beck về các khung thử nghiệm sử dụng mẫu được chia sẻ bởi

python -m unittest tests/test_something.py
9

người khó tính

Khung đơn giản nhất của bên thứ ba với cú pháp nhẹ hơn để viết bài kiểm tra. Ví dụ,

python -m unittest -v test_module
6

Phân loại công cụ kiểm tra Python

Một danh sách đầy đủ các công cụ kiểm tra Python bao gồm các khung kiểm tra chức năng và thư viện đối tượng giả

Thử nghiệm trong Danh sách gửi thư Python

Một nhóm có sở thích đặc biệt để thảo luận về thử nghiệm và các công cụ thử nghiệm trong Python

Tập lệnh

python -m unittest -v test_module
7 trong bản phân phối nguồn Python là một công cụ GUI để khám phá và thực thi thử nghiệm. Điều này chủ yếu nhằm mục đích dễ sử dụng cho những người mới thử nghiệm đơn vị. Đối với môi trường sản xuất, các thử nghiệm nên được điều khiển bởi một hệ thống tích hợp liên tục như Buildbot, Jenkins, GitHub Actions hoặc AppVeyor

Ví dụ cơ bản¶

Mô-đun

python -m unittest tests/test_something.py
9 cung cấp một bộ công cụ phong phú để xây dựng và chạy thử nghiệm. Phần này chứng minh rằng một tập hợp con nhỏ của các công cụ đủ để đáp ứng nhu cầu của hầu hết người dùng

Đây là một đoạn script ngắn để kiểm tra ba phương thức chuỗi

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            s.split(2)

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

Một testcase được tạo bởi phân lớp

python -m unittest -v test_module
9. Ba bài kiểm tra riêng lẻ được xác định bằng các phương thức có tên bắt đầu bằng các chữ cái
python -m unittest tests/test_something.py
10. Quy ước đặt tên này thông báo cho người chạy thử nghiệm về phương thức nào đại diện cho các thử nghiệm

Mấu chốt của mỗi bài kiểm tra là một cuộc gọi tới

python -m unittest tests/test_something.py
11 để kiểm tra kết quả mong đợi; . Các phương pháp này được sử dụng thay cho câu lệnh
python -m unittest tests/test_something.py
15 để người chạy thử nghiệm có thể tích lũy tất cả các kết quả thử nghiệm và tạo báo cáo

Các phương thức

python -m unittest tests/test_something.py
16 và
python -m unittest tests/test_something.py
17 cho phép bạn xác định các lệnh sẽ được thực thi trước và sau mỗi phương thức kiểm tra. Chúng được đề cập chi tiết hơn trong phần Tổ chức mã kiểm tra .

Khối cuối cùng cho thấy một cách đơn giản để chạy thử nghiệm.

python -m unittest tests/test_something.py
18 cung cấp giao diện dòng lệnh cho tập lệnh thử nghiệm. Khi chạy từ dòng lệnh, tập lệnh trên sẽ tạo ra một đầu ra giống như thế này

python -m unittest tests/test_something.py
0

Chuyển tùy chọn

python -m unittest tests/test_something.py
19 cho tập lệnh thử nghiệm của bạn sẽ hướng dẫn
python -m unittest tests/test_something.py
18 kích hoạt mức độ chi tiết cao hơn và tạo ra kết quả sau

python -m unittest tests/test_something.py
3

Các ví dụ trên cho thấy các tính năng

python -m unittest tests/test_something.py
9 được sử dụng phổ biến nhất, đủ để đáp ứng nhiều nhu cầu kiểm tra hàng ngày. Phần còn lại của tài liệu khám phá bộ tính năng đầy đủ từ các nguyên tắc đầu tiên

Đã thay đổi trong phiên bản 3. 11. Hành vi trả về một giá trị từ một phương pháp thử nghiệm (không phải giá trị mặc định

python -m unittest tests/test_something.py
52), hiện không được dùng nữa.

Giao diện dòng lệnh¶

Mô-đun unittest có thể được sử dụng từ dòng lệnh để chạy thử nghiệm từ các mô-đun, lớp hoặc thậm chí các phương thức thử nghiệm riêng lẻ

python -m unittest tests/test_something.py
6

Bạn có thể chuyển vào một danh sách với bất kỳ sự kết hợp nào của tên mô-đun và tên phương thức hoặc lớp đủ điều kiện

Các mô-đun thử nghiệm cũng có thể được chỉ định theo đường dẫn tệp

python -m unittest tests/test_something.py

Điều này cho phép bạn sử dụng hoàn thành tên tệp shell để chỉ định mô-đun thử nghiệm. Tệp được chỉ định vẫn phải nhập được dưới dạng mô-đun. Đường dẫn được chuyển đổi thành tên mô-đun bằng cách xóa '. py' và chuyển đổi các dấu phân cách đường dẫn thành '. ’. Nếu bạn muốn thực thi tệp thử nghiệm không thể nhập dưới dạng mô-đun, thay vào đó, bạn nên thực thi tệp trực tiếp

Bạn có thể chạy thử nghiệm với nhiều chi tiết hơn (độ chi tiết cao hơn) bằng cách chuyển vào cờ -v

python -m unittest -v test_module

Khi được thực thi mà không có đối số Thử nghiệm Khám phá được bắt đầu.

python -m unittest tests/test_something.py
1

Để biết danh sách tất cả các tùy chọn dòng lệnh

python -m unittest tests/test_something.py
5

Đã thay đổi trong phiên bản 3. 2. Trong các phiên bản trước, chỉ có thể chạy các phương thức thử nghiệm riêng lẻ chứ không phải mô-đun hoặc lớp.

Tùy chọn dòng lệnh¶

unittest hỗ trợ các tùy chọn dòng lệnh này

-b, --bộ đệm

Đầu ra tiêu chuẩn và các luồng lỗi tiêu chuẩn được lưu vào bộ đệm trong quá trình chạy thử nghiệm. Đầu ra trong một bài kiểm tra vượt qua bị loại bỏ. Đầu ra được lặp lại bình thường khi kiểm tra lỗi hoặc lỗi và được thêm vào thông báo lỗi

-c, --bắt

Control-C trong quá trình chạy thử, đợi thử nghiệm hiện tại kết thúc rồi báo cáo tất cả các kết quả cho đến nay. Control-C thứ hai tăng ngoại lệ

python -m unittest tests/test_something.py
53 bình thường

Xem Xử lý tín hiệu để biết các chức năng cung cấp chức năng này

-f, --không thành công

Dừng chạy thử khi có lỗi hoặc lỗi đầu tiên

-k

Chỉ chạy thử nghiệm các phương thức và lớp phù hợp với mẫu hoặc chuỗi con. Tùy chọn này có thể được sử dụng nhiều lần, trong trường hợp đó, tất cả các trường hợp thử nghiệm khớp với bất kỳ mẫu nào đã cho đều được bao gồm

Các mẫu có chứa ký tự đại diện (

python -m unittest tests/test_something.py
54) được khớp với tên bài kiểm tra bằng cách sử dụng
python -m unittest tests/test_something.py
55;

Các mẫu được so khớp với tên phương thức kiểm tra đủ điều kiện do trình tải kiểm tra nhập vào

Ví dụ:

python -m unittest tests/test_something.py
56 khớp với
python -m unittest tests/test_something.py
57,
python -m unittest tests/test_something.py
58, nhưng không khớp với
python -m unittest tests/test_something.py
59

--người dân địa phương

Hiển thị các biến cục bộ trong truy nguyên

Mới trong phiên bản 3. 2. Các tùy chọn dòng lệnh

python -m unittest -v test_module
80,
python -m unittest -v test_module
81 và
python -m unittest -v test_module
82 đã được thêm vào.

Mới trong phiên bản 3. 5. Tùy chọn dòng lệnh

python -m unittest -v test_module
83.

Mới trong phiên bản 3. 7. Tùy chọn dòng lệnh

python -m unittest -v test_module
84.

Dòng lệnh cũng có thể được sử dụng để khám phá thử nghiệm, để chạy tất cả các thử nghiệm trong một dự án hoặc chỉ một tập hợp con

Khám phá thử nghiệm¶

Mới trong phiên bản 3. 2

Unittest hỗ trợ khám phá thử nghiệm đơn giản. Để tương thích với khám phá thử nghiệm, tất cả các tệp thử nghiệm phải là mô-đun hoặc gói importable from the top-level directory of the project (this means that their filenames must be valid identifiers).

Khám phá thử nghiệm được triển khai trong

python -m unittest -v test_module
85, nhưng cũng có thể được sử dụng từ dòng lệnh. Việc sử dụng dòng lệnh cơ bản là

python -m unittest -v test_module
8

Ghi chú

Là một phím tắt,

python -m unittest -v test_module
86 tương đương với
python -m unittest -v test_module
87. Nếu bạn muốn truyền đối số để kiểm tra khám phá, lệnh phụ
python -m unittest -v test_module
88 phải được sử dụng rõ ràng

Lệnh phụ

python -m unittest -v test_module
88 có các tùy chọn sau

-v, --dài dòng

Báo cáo dài dòng

-s, --thư mục bắt đầu thư mục

Thư mục để bắt đầu khám phá (

python -m unittest -v test_module
90 mặc định)

-p, --mẫu mẫu ¶<

Mẫu để khớp với các tệp thử nghiệm (mặc định ____491)

-t, --thư mục cấp cao nhất thư mục

Thư mục cấp cao nhất của dự án (mặc định là thư mục bắt đầu)

Các tùy chọn

python -m unittest -v test_module
92,
python -m unittest -v test_module
93 và
python -m unittest -v test_module
94 có thể được chuyển vào dưới dạng đối số vị trí theo thứ tự đó. Hai dòng lệnh sau là tương đương

python -m unittest -v test_module
9

Cũng như là một đường dẫn, có thể chuyển tên gói, ví dụ

python -m unittest -v test_module
95, làm thư mục bắt đầu. Tên gói bạn cung cấp sau đó sẽ được nhập và vị trí của nó trên hệ thống tệp sẽ được sử dụng làm thư mục bắt đầu

thận trọng

Phát hiện thử nghiệm tải các bài kiểm tra bằng cách nhập chúng. Khi khám phá thử nghiệm đã tìm thấy tất cả các tệp thử nghiệm từ thư mục bắt đầu mà bạn chỉ định, nó sẽ biến các đường dẫn thành tên gói để nhập. Ví dụ:

python -m unittest -v test_module
96 sẽ được nhập dưới dạng
python -m unittest -v test_module
97

Nếu bạn đã cài đặt một gói trên toàn cầu và thử khám phá kiểm tra trên một bản sao khác của gói thì quá trình nhập có thể xảy ra từ sai vị trí. Nếu điều này xảy ra, kiểm tra khám phá sẽ cảnh báo bạn và thoát

Nếu bạn cung cấp thư mục bắt đầu dưới dạng tên gói thay vì đường dẫn đến thư mục thì khám phá giả định rằng bất kỳ vị trí nào nó nhập từ đó đều là vị trí bạn dự định, vì vậy bạn sẽ không nhận được cảnh báo

Các mô-đun và gói thử nghiệm có thể tùy chỉnh quá trình tải và phát hiện thử nghiệm thông qua giao thức load_tests

Đã thay đổi trong phiên bản 3. 4. Phát hiện thử nghiệm hỗ trợ gói không gian tên cho thư mục bắt đầu. Lưu ý rằng bạn cũng cần chỉ định thư mục cấp cao nhất (e. g.

python -m unittest -v test_module
98).

Đã thay đổi trong phiên bản 3. 11. Trăn 3. 11 bỏ hỗ trợ gói không gian tên . Nó đã bị hỏng kể từ Python 3. 7. Thư mục bắt đầu và thư mục con chứa các bài kiểm tra phải là gói thông thường có tệp

python -m unittest -v test_module
99.

Các thư mục chứa thư mục bắt đầu vẫn có thể là một gói không gian tên. Trong trường hợp này, bạn cần chỉ định thư mục bắt đầu là tên gói chấm và thư mục đích một cách rõ ràng. Ví dụ

python -m unittest tests/test_something.py
00

Tổ chức mã kiểm tra¶

Các khối xây dựng cơ bản của thử nghiệm đơn vị là các trường hợp thử nghiệm - các kịch bản đơn lẻ phải được thiết lập và kiểm tra tính chính xác. Trong

python -m unittest tests/test_something.py
9, các trường hợp thử nghiệm được đại diện bởi
python -m unittest -v test_module
9 trường hợp. Để tạo các trường hợp thử nghiệm của riêng bạn, bạn phải viết các lớp con của
python -m unittest -v test_module
3 hoặc sử dụng
python -m unittest tests/test_something.py
003

Mã thử nghiệm của phiên bản

python -m unittest -v test_module
3 phải hoàn toàn khép kín, sao cho mã có thể chạy độc lập hoặc kết hợp tùy ý với bất kỳ số lượng trường hợp thử nghiệm nào khác

Lớp con

python -m unittest -v test_module
3 đơn giản nhất sẽ thực hiện một phương thức thử nghiệm (i. e. một phương thức có tên bắt đầu bằng
python -m unittest tests/test_something.py
10) để thực hiện mã kiểm tra cụ thể

python -m unittest tests/test_something.py
01

Lưu ý rằng để kiểm tra một cái gì đó, chúng tôi sử dụng một trong các phương pháp

python -m unittest tests/test_something.py
007 được cung cấp bởi lớp cơ sở
python -m unittest -v test_module
3. Nếu thử nghiệm thất bại, một ngoại lệ sẽ được đưa ra với thông báo giải thích và
python -m unittest tests/test_something.py
9 sẽ xác định trường hợp thử nghiệm là thất bại. Bất kỳ trường hợp ngoại lệ nào khác sẽ được coi là lỗi

Các thử nghiệm có thể rất nhiều và thiết lập của chúng có thể lặp đi lặp lại. May mắn thay, chúng tôi có thể xác định mã thiết lập bằng cách triển khai một phương pháp có tên là

python -m unittest tests/test_something.py
16, mà khung thử nghiệm sẽ tự động gọi cho mọi thử nghiệm đơn lẻ mà chúng tôi chạy

python -m unittest tests/test_something.py
02

Ghi chú

Thứ tự chạy các thử nghiệm khác nhau được xác định bằng cách sắp xếp tên phương thức thử nghiệm theo thứ tự tích hợp sẵn cho chuỗi

Nếu phương thức

python -m unittest tests/test_something.py
16 đưa ra một ngoại lệ trong khi thử nghiệm đang chạy, khung sẽ coi thử nghiệm đó đã bị lỗi và phương thức thử nghiệm sẽ không được thực thi

Tương tự, chúng ta có thể cung cấp một phương thức

python -m unittest tests/test_something.py
17 để dọn dẹp sau khi chạy phương thức thử nghiệm

python -m unittest tests/test_something.py
03

Nếu

python -m unittest tests/test_something.py
16 thành công,
python -m unittest tests/test_something.py
17 sẽ được chạy cho dù phương pháp thử nghiệm có thành công hay không

Môi trường làm việc cho mã kiểm tra như vậy được gọi là vật cố kiểm tra. Một phiên bản TestCase mới được tạo dưới dạng một lịch thi thử duy nhất được sử dụng để thực thi từng phương thức thử nghiệm riêng lẻ. Do đó,

python -m unittest tests/test_something.py
16,
python -m unittest tests/test_something.py
17 và
python -m unittest tests/test_something.py
017 sẽ được gọi một lần cho mỗi bài kiểm tra

Bạn nên sử dụng triển khai TestCase để nhóm các bài kiểm tra lại với nhau theo các tính năng mà chúng kiểm tra.

python -m unittest tests/test_something.py
9 cung cấp một cơ chế cho việc này. bộ thử nghiệm, được đại diện bởi lớp ________ 2020 của ________ 09. Trong hầu hết các trường hợp, gọi điện cho
python -m unittest tests/test_something.py
18 sẽ làm điều đúng đắn và thu thập tất cả các trường hợp thử nghiệm của mô-đun cho bạn và thực hiện chúng

Tuy nhiên, nếu bạn muốn tùy chỉnh việc xây dựng bộ thử nghiệm của mình, bạn có thể tự làm điều đó

python -m unittest tests/test_something.py
04

Bạn có thể đặt các định nghĩa về trường hợp thử nghiệm và bộ thử nghiệm trong cùng mô-đun với mã mà chúng sẽ kiểm tra (chẳng hạn như

python -m unittest tests/test_something.py
022), nhưng có một số lợi thế khi đặt mã kiểm tra trong một mô-đun riêng biệt, chẳng hạn như
python -m unittest tests/test_something.py
023

  • Mô-đun thử nghiệm có thể chạy độc lập từ dòng lệnh

  • Có thể dễ dàng tách mã kiểm tra khỏi mã vận chuyển hơn

  • Ít bị cám dỗ thay đổi mã kiểm tra để phù hợp với mã mà nó kiểm tra mà không có lý do chính đáng

  • Mã kiểm tra nên được sửa đổi ít thường xuyên hơn nhiều so với mã mà nó kiểm tra

  • Mã được kiểm tra có thể được cấu trúc lại dễ dàng hơn

  • Các bài kiểm tra cho các mô-đun được viết bằng C dù sao cũng phải ở các mô-đun riêng biệt, vậy tại sao không nhất quán?

  • Nếu chiến lược thử nghiệm thay đổi, không cần thay đổi mã nguồn

Sử dụng lại mã kiểm tra cũ¶

Một số người dùng sẽ thấy rằng họ có sẵn mã kiểm tra mà họ muốn chạy từ

python -m unittest tests/test_something.py
9 mà không cần chuyển đổi mọi chức năng kiểm tra cũ sang phân lớp
python -m unittest -v test_module
3

Vì lý do này,

python -m unittest tests/test_something.py
9 cung cấp một lớp
python -m unittest tests/test_something.py
003. Lớp con này của
python -m unittest -v test_module
3 có thể được sử dụng để bọc một chức năng kiểm tra hiện có. Chức năng thiết lập và phá bỏ cũng có thể được cung cấp

Đưa ra chức năng kiểm tra sau

python -m unittest tests/test_something.py
05

người ta có thể tạo một trường hợp thử nghiệm tương đương như sau, với các phương pháp thiết lập và phá bỏ tùy chọn

python -m unittest tests/test_something.py
06

Ghi chú

Mặc dù có thể sử dụng

python -m unittest tests/test_something.py
003 để nhanh chóng chuyển đổi cơ sở thử nghiệm hiện có sang hệ thống dựa trên
python -m unittest tests/test_something.py
9, phương pháp này không được khuyến nghị. Dành thời gian để thiết lập các lớp con
python -m unittest -v test_module
3 phù hợp sẽ giúp việc tái cấu trúc thử nghiệm trong tương lai dễ dàng hơn rất nhiều

Trong một số trường hợp, các bài kiểm tra hiện có có thể đã được viết bằng mô-đun

python -m unittest -v test_module
4. Nếu vậy,
python -m unittest -v test_module
4 cung cấp một lớp
python -m unittest tests/test_something.py
034 có thể tự động xây dựng các phiên bản
python -m unittest tests/test_something.py
035 từ các thử nghiệm dựa trên
python -m unittest -v test_module
4 hiện có

Bỏ qua các bài kiểm tra và thất bại dự kiến¶

Mới trong phiên bản 3. 1

Unittest hỗ trợ bỏ qua các phương pháp kiểm tra riêng lẻ và thậm chí cả lớp kiểm tra. Ngoài ra, nó hỗ trợ đánh dấu một bài kiểm tra là "lỗi dự kiến", một bài kiểm tra bị hỏng và sẽ không đạt, nhưng không được tính là lỗi trên

python -m unittest tests/test_something.py
037

Bỏ qua một bài kiểm tra chỉ đơn giản là sử dụng công cụ trang trí

python -m unittest tests/test_something.py
038 decorator hoặc một trong các biến thể có điều kiện của nó, gọi
python -m unittest tests/test_something.py
039 trong một phương pháp kiểm tra hoặc
python -m unittest tests/test_something.py
16 .

Bỏ qua cơ bản trông như thế này

python -m unittest tests/test_something.py
07

Đây là kết quả của việc chạy ví dụ trên ở chế độ dài dòng

python -m unittest tests/test_something.py
08

Các lớp có thể được bỏ qua giống như các phương thức

python -m unittest tests/test_something.py
09

python -m unittest tests/test_something.py
042 cũng có thể bỏ qua bài kiểm tra. Điều này hữu ích khi không có tài nguyên cần thiết lập

Lỗi dự kiến ​​​​sử dụng trình trang trí

python -m unittest tests/test_something.py
043

python -m unittest tests/test_something.py
30

Thật dễ dàng để cuộn các bộ trang trí bỏ qua của riêng bạn bằng cách tạo một bộ trang trí gọi

python -m unittest tests/test_something.py
038 trong bài kiểm tra khi nó muốn nó bị bỏ qua. Trình trang trí này bỏ qua bài kiểm tra trừ khi đối tượng được thông qua có một thuộc tính nhất định

python -m unittest tests/test_something.py
31

Các trình trang trí và ngoại lệ sau thực hiện bỏ qua kiểm tra và các lỗi dự kiến

@đơn vị kiểm tra. bỏ qua(lý do)

Vô điều kiện bỏ qua bài kiểm tra trang trí. lý do nên mô tả lý do tại sao bài kiểm tra bị bỏ qua

@đơn vị kiểm tra. skipIf(điều kiện , lý do)

Bỏ qua bài kiểm tra trang trí nếu điều kiện là đúng

@đơn vị kiểm tra. skipUnless(điều kiện , lý do)

Bỏ qua bài kiểm tra trang trí trừ khi điều kiện là đúng

@đơn vị kiểm tra. expectedFailure

Đánh dấu bài kiểm tra là lỗi hoặc lỗi dự kiến. Nếu thử nghiệm thất bại hoặc lỗi trong chính chức năng thử nghiệm (chứ không phải ở một trong các phương pháp cố định thử nghiệm) thì nó sẽ được coi là thành công. Nếu vượt qua bài kiểm tra, nó sẽ được coi là thất bại

ngoại lệ đơn vị kiểm tra. SkipTest(lý do)

Ngoại lệ này được đưa ra để bỏ qua một bài kiểm tra

Thông thường, bạn có thể sử dụng

python -m unittest tests/test_something.py
039 hoặc một trong các trình trang trí bỏ qua thay vì nâng trực tiếp điều này

Các bài kiểm tra bị bỏ qua sẽ không có

python -m unittest tests/test_something.py
16 hoặc
python -m unittest tests/test_something.py
17 chạy xung quanh chúng. Các lớp học bị bỏ qua sẽ không chạy
python -m unittest tests/test_something.py
048 hoặc
python -m unittest tests/test_something.py
049. Các mô-đun bị bỏ qua sẽ không chạy được
python -m unittest tests/test_something.py
050 hoặc
python -m unittest tests/test_something.py
051

Phân biệt các lần lặp kiểm tra bằng cách sử dụng phép trừ¶

Mới trong phiên bản 3. 4

Khi có sự khác biệt rất nhỏ giữa các thử nghiệm của bạn, chẳng hạn như một số tham số, unittest cho phép bạn phân biệt chúng bên trong phần thân của phương pháp thử nghiệm bằng cách sử dụng trình quản lý ngữ cảnh

python -m unittest tests/test_something.py
052

Ví dụ, bài kiểm tra sau

python -m unittest tests/test_something.py
32

sẽ tạo ra đầu ra sau

python -m unittest tests/test_something.py
33

Nếu không sử dụng phép thử phụ, quá trình thực thi sẽ dừng sau lỗi đầu tiên và lỗi sẽ khó chẩn đoán hơn vì giá trị của

python -m unittest tests/test_something.py
053 sẽ không được hiển thị

python -m unittest tests/test_something.py
34

Lớp và hàm¶

Phần này mô tả sâu về API của

python -m unittest tests/test_something.py
9

Các ca kiểm thử¶

lớp đơn vị kiểm tra. TestCase(tên phương thức=')

Các thể hiện của lớp

python -m unittest -v test_module
3 đại diện cho các đơn vị kiểm tra logic trong vũ trụ
python -m unittest tests/test_something.py
9. Lớp này dự định sẽ được sử dụng làm lớp cơ sở, với các thử nghiệm cụ thể được thực hiện bởi các lớp con cụ thể. Lớp này triển khai giao diện cần thiết cho người chạy thử nghiệm để cho phép nó thực hiện các bài kiểm tra và các phương thức mà mã kiểm tra có thể sử dụng để kiểm tra và báo cáo các loại lỗi khác nhau

Mỗi phiên bản của

python -m unittest -v test_module
3 sẽ chạy một phương thức cơ sở duy nhất. phương thức có tên methodName. Trong hầu hết các trường hợp sử dụng
python -m unittest -v test_module
3, bạn sẽ không thay đổi tên phương thức cũng như không triển khai lại phương thức mặc định của
python -m unittest tests/test_something.py
059

Đã thay đổi trong phiên bản 3. 2. ______33 có thể được khởi tạo thành công mà không cần cung cấp tên phương thức. Điều này giúp thử nghiệm với

python -m unittest -v test_module
3 từ trình thông dịch tương tác dễ dàng hơn.

Phiên bản

python -m unittest -v test_module
3 cung cấp ba nhóm phương thức. một nhóm được sử dụng để chạy thử nghiệm, một nhóm khác được triển khai thử nghiệm sử dụng để kiểm tra các điều kiện và báo cáo lỗi và một số phương pháp điều tra cho phép thu thập thông tin về bản thân thử nghiệm

Các phương thức trong nhóm đầu tiên (đang chạy thử nghiệm) là

thiết lập()

Phương pháp được gọi để chuẩn bị vật cố định thử nghiệm. Điều này được gọi ngay trước khi gọi phương thức thử nghiệm; . Việc thực hiện mặc định không có gì

xé xuống()

Phương thức được gọi ngay sau khi phương thức kiểm tra được gọi và kết quả được ghi lại. Điều này được gọi ngay cả khi phương thức kiểm tra đưa ra một ngoại lệ, vì vậy việc triển khai trong các lớp con có thể cần phải đặc biệt cẩn thận về việc kiểm tra trạng thái bên trong. Bất kỳ ngoại lệ nào, ngoại trừ

python -m unittest tests/test_something.py
063 hoặc
python -m unittest tests/test_something.py
041, được nêu ra theo phương pháp này sẽ được coi là lỗi bổ sung thay vì lỗi thử nghiệm (do đó làm tăng tổng số lỗi được báo cáo). Phương thức này sẽ chỉ được gọi nếu
python -m unittest tests/test_something.py
16 thành công, bất kể kết quả của phương thức thử nghiệm là gì. Việc thực hiện mặc định không có gì

setUpClass()

Một phương thức lớp được gọi trước khi các bài kiểm tra trong một lớp riêng lẻ được chạy.

python -m unittest tests/test_something.py
068 được gọi với lớp là đối số duy nhất và phải được trang trí dưới dạng
python -m unittest tests/test_something.py
069

python -m unittest tests/test_something.py
35

Xem Đồ đạc loại và mô-đun để biết thêm chi tiết

Mới trong phiên bản 3. 2

tearDownClass()

Một phương thức lớp được gọi sau khi các bài kiểm tra trong một lớp riêng lẻ đã chạy.

python -m unittest tests/test_something.py
070 được gọi với lớp là đối số duy nhất và phải được trang trí dưới dạng
python -m unittest tests/test_something.py
069

python -m unittest tests/test_something.py
36

Xem Đồ đạc loại và mô-đun để biết thêm chi tiết

Mới trong phiên bản 3. 2

chạy(kết quả=Không có)

Chạy thử nghiệm, thu thập kết quả vào đối tượng

python -m unittest tests/test_something.py
037 được truyền dưới dạng kết quả. Nếu kết quả bị bỏ qua hoặc
python -m unittest tests/test_something.py
52, một đối tượng kết quả tạm thời được tạo (bằng cách gọi phương thức
python -m unittest tests/test_something.py
074) và được sử dụng. Đối tượng kết quả được trả về người gọi của
python -m unittest tests/test_something.py
075

Có thể có tác dụng tương tự bằng cách đơn giản gọi thể hiện

python -m unittest -v test_module
3

Đã thay đổi trong phiên bản 3. 3. Các phiên bản trước của

python -m unittest tests/test_something.py
077 không trả về kết quả. Không gọi một ví dụ.

skipTest(lý do)

Gọi điều này trong một phương pháp thử nghiệm hoặc

python -m unittest tests/test_something.py
16 bỏ qua thử nghiệm hiện tại. Xem Bỏ qua kiểm tra và lỗi dự kiến để biết thêm thông tin.

Mới trong phiên bản 3. 1

subTest(tin nhắn=Không có, **params)

Trả về trình quản lý bối cảnh thực thi khối mã kèm theo dưới dạng phép thử phụ. msg và params là các giá trị tùy ý, tùy chọn được hiển thị bất cứ khi nào một phép thử phụ không thành công, cho phép bạn xác định chúng một cách rõ ràng

Một trường hợp kiểm tra có thể chứa bất kỳ số lượng khai báo kiểm tra con nào và chúng có thể được lồng vào nhau tùy ý

Xem Phân biệt các phép thử lặp lại bằng phép thử con để biết thêm thông tin.

Mới trong phiên bản 3. 4

gỡ lỗi()

Chạy thử nghiệm mà không thu thập kết quả. Điều này cho phép các ngoại lệ do thử nghiệm đưa ra được truyền tới người gọi và có thể được sử dụng để hỗ trợ chạy thử nghiệm trong trình gỡ lỗi

Lớp

python -m unittest -v test_module
3 cung cấp một số phương thức xác nhận để kiểm tra và báo cáo lỗi. Bảng sau liệt kê các phương pháp được sử dụng phổ biến nhất (xem các bảng bên dưới để biết thêm các phương pháp xác nhận)

Phương pháp

Kiểm tra xem

Mới

python -m unittest tests/test_something.py
080

python -m unittest tests/test_something.py
081

python -m unittest tests/test_something.py
082

python -m unittest tests/test_something.py
083

python -m unittest tests/test_something.py
084

python -m unittest tests/test_something.py
085

python -m unittest tests/test_something.py
086

python -m unittest tests/test_something.py
087

python -m unittest tests/test_something.py
088

python -m unittest tests/test_something.py
089

3. 1

python -m unittest tests/test_something.py
090

python -m unittest tests/test_something.py
091

3. 1

python -m unittest tests/test_something.py
092

python -m unittest tests/test_something.py
093

3. 1

python -m unittest tests/test_something.py
094

python -m unittest tests/test_something.py
095

3. 1

python -m unittest tests/test_something.py
096

python -m unittest tests/test_something.py
097

3. 1

python -m unittest tests/test_something.py
098

python -m unittest tests/test_something.py
099

3. 1

python -m unittest tests/test_something.py
300

python -m unittest tests/test_something.py
301

3. 2

python -m unittest tests/test_something.py
302

python -m unittest tests/test_something.py
303

3. 2

Tất cả các phương thức xác nhận đều chấp nhận một đối số msg, nếu được chỉ định, được sử dụng làm thông báo lỗi khi thất bại (xem thêm

python -m unittest tests/test_something.py
304). Lưu ý rằng đối số từ khóa msg chỉ có thể được chuyển đến
python -m unittest tests/test_something.py
14,
python -m unittest tests/test_something.py
306,
python -m unittest tests/test_something.py
307,
python -m unittest tests/test_something.py
308 khi chúng được sử dụng làm trình quản lý ngữ cảnh

assertEqual(đầu tiên , thứ hai, msg=None)

Kiểm tra xem thứ nhất và thứ hai có bằng nhau không. Nếu các giá trị không so sánh bằng nhau, thử nghiệm sẽ thất bại

Ngoài ra, nếu thứ nhất và thứ hai là cùng một loại chính xác và là một trong danh sách, tuple, dict, set, freezeset hoặc str hoặc bất kỳ loại nào mà lớp con đăng ký với

python -m unittest tests/test_something.py
309 thì hàm đẳng thức dành riêng cho loại sẽ được gọi trong . list of type-specific methods).

Đã thay đổi trong phiên bản 3. 1. Đã thêm tính năng tự động gọi hàm đẳng thức theo loại cụ thể.

Đã thay đổi trong phiên bản 3. 2. ______2310 được thêm làm hàm đẳng thức kiểu mặc định để so sánh các chuỗi.

assertNotEqual(đầu tiên , thứ hai, msg=None)

Kiểm tra thứ nhất và thứ hai không bằng nhau. Nếu các giá trị so sánh bằng nhau, thử nghiệm sẽ thất bại

assertTrue(expr , tin nhắn=None)assertFalse(expr, msg=None)

Kiểm tra xem expr có đúng (hoặc sai)

Lưu ý rằng điều này tương đương với

python -m unittest tests/test_something.py
311 chứ không phải với
python -m unittest tests/test_something.py
312 (sử dụng
python -m unittest tests/test_something.py
313 cho trường hợp sau). Phương pháp này cũng nên tránh khi có sẵn các phương pháp cụ thể hơn (e. g.
python -m unittest tests/test_something.py
080 thay vì
python -m unittest tests/test_something.py
315), vì chúng cung cấp thông báo lỗi tốt hơn trong trường hợp không thành công

assertIs(đầu tiên , thứ hai, msg=None)assertIsNot(first, second, msg=None)

Kiểm tra xem thứ nhất và thứ hai có phải (hoặc không) cùng một đối tượng không

Mới trong phiên bản 3. 1

assertIsNone(expr , tin nhắn=None)assertIsNotNone(expr, msg=None)

Kiểm tra expr đó là (hoặc không)

python -m unittest tests/test_something.py
52

Mới trong phiên bản 3. 1

assertIn(thành viên , vùng chứa, msg=None)assertNotIn(member, container, msg=None)

Kiểm tra thành viên đó có (hoặc không) trong vùng chứa

Mới trong phiên bản 3. 1

assertIsInstance(obj , cls, msg=None)assertNotIsInstance(obj, cls, msg=None)

Kiểm tra xem obj có phải (hoặc không) là một thể hiện của cls (có thể là một lớp hoặc một bộ lớp, được hỗ trợ bởi

python -m unittest tests/test_something.py
317). Để kiểm tra loại chính xác, hãy sử dụng
python -m unittest tests/test_something.py
318

Mới trong phiên bản 3. 2

Cũng có thể kiểm tra việc tạo ra các ngoại lệ, cảnh báo và thông báo nhật ký bằng các phương pháp sau

Phương pháp

Kiểm tra xem

Mới

python -m unittest tests/test_something.py
319

python -m unittest tests/test_something.py
320 tăng ex

python -m unittest tests/test_something.py
321

python -m unittest tests/test_something.py
320 tăng exc và thông báo khớp với regex r

3. 1

python -m unittest tests/test_something.py
323

python -m unittest tests/test_something.py
320 tăng cảnh báo

3. 2

python -m unittest tests/test_something.py
325

python -m unittest tests/test_something.py
320 tăng cảnh báo và thông báo khớp với regex r

3. 2

python -m unittest tests/test_something.py
327

Khối

python -m unittest tests/test_something.py
328 ghi nhật ký trên logger với mức tối thiểu

3. 4

python -m unittest tests/test_something.py
329

Khối
python -m unittest tests/test_something.py
328 không đăng nhập

logger với mức tối thiểu

3. 10

assertRaises(ngoại lệ , có thể gọi, *args, **kwds)assertRaises(exception, *, msg=None)

Kiểm tra xem có ngoại lệ nào xảy ra khi có thể gọi được với bất kỳ đối số vị trí hoặc từ khóa nào cũng được chuyển đến

python -m unittest tests/test_something.py
14. Thử nghiệm vượt qua nếu ngoại lệ được đưa ra, là lỗi nếu một ngoại lệ khác được đưa ra hoặc không thành công nếu không có ngoại lệ nào được đưa ra. Để bắt bất kỳ nhóm ngoại lệ nào, một bộ chứa các lớp ngoại lệ có thể được chuyển thành ngoại lệ

Nếu chỉ có ngoại lệ và có thể đối số msg được cung cấp, hãy trả về trình quản lý ngữ cảnh để mã được kiểm tra có thể được viết nội tuyến thay vì dưới dạng hàm

python -m unittest tests/test_something.py
37

Khi được sử dụng làm trình quản lý ngữ cảnh,

python -m unittest tests/test_something.py
14 chấp nhận thông báo đối số từ khóa bổ sung

Trình quản lý bối cảnh sẽ lưu trữ đối tượng ngoại lệ đã bắt trong thuộc tính

python -m unittest tests/test_something.py
333 của nó. Điều này có thể hữu ích nếu mục đích là thực hiện kiểm tra bổ sung đối với ngoại lệ được đưa ra

python -m unittest tests/test_something.py
38

Đã thay đổi trong phiên bản 3. 1. Đã thêm khả năng sử dụng

python -m unittest tests/test_something.py
14 làm trình quản lý ngữ cảnh.

Đã thay đổi trong phiên bản 3. 2. Đã thêm thuộc tính

python -m unittest tests/test_something.py
333.

Đã thay đổi trong phiên bản 3. 3. Đã thêm đối số từ khóa msg khi được sử dụng làm trình quản lý ngữ cảnh.

assertRaisesRegex(ngoại lệ , regex, callable, *args, **kwds)assertRaisesRegex(exception, regex, *, msg=None)

Giống như

python -m unittest tests/test_something.py
14 nhưng cũng kiểm tra xem regex khớp với biểu diễn chuỗi của ngoại lệ đã nêu. regex có thể là một đối tượng biểu thức chính quy hoặc một chuỗi chứa biểu thức chính quy phù hợp để sử dụng bởi
python -m unittest tests/test_something.py
337. ví dụ

python -m unittest tests/test_something.py
39

hoặc

python -m unittest tests/test_something.py
60

Mới trong phiên bản 3. 1. Đã thêm dưới tên

python -m unittest tests/test_something.py
338.

Đã thay đổi trong phiên bản 3. 2. Đổi tên thành

python -m unittest tests/test_something.py
306.

Đã thay đổi trong phiên bản 3. 3. Đã thêm đối số từ khóa msg khi được sử dụng làm trình quản lý ngữ cảnh.

assertWarns(cảnh báo , có thể gọi, *args, **kwds)assertWarns(warning, *, msg=None)

Kiểm tra xem cảnh báo có được kích hoạt khi có thể gọi được gọi với bất kỳ đối số vị trí hoặc từ khóa nào cũng được chuyển đến

python -m unittest tests/test_something.py
307. Kiểm tra vượt qua nếu cảnh báo được kích hoạt và không thành công nếu không. Bất kỳ ngoại lệ là một lỗi. Để nắm bắt bất kỳ nhóm cảnh báo nào, một bộ chứa các lớp cảnh báo có thể được chuyển dưới dạng cảnh báo

Nếu chỉ đưa ra cảnh báo và có thể là đối số thông báo, hãy trả về trình quản lý ngữ cảnh để mã được kiểm tra có thể được viết nội tuyến thay vì dưới dạng hàm

python -m unittest tests/test_something.py
61

Khi được sử dụng làm trình quản lý ngữ cảnh,

python -m unittest tests/test_something.py
307 chấp nhận thông báo đối số từ khóa bổ sung

Trình quản lý bối cảnh sẽ lưu trữ đối tượng cảnh báo bị bắt trong thuộc tính

python -m unittest tests/test_something.py
342 của nó và dòng nguồn đã kích hoạt cảnh báo trong thuộc tính
python -m unittest tests/test_something.py
343 và
python -m unittest tests/test_something.py
344. Điều này có thể hữu ích nếu mục đích là thực hiện kiểm tra bổ sung đối với cảnh báo bị bắt

python -m unittest tests/test_something.py
62

Phương pháp này hoạt động bất kể các bộ lọc cảnh báo tại chỗ khi nó được gọi

Mới trong phiên bản 3. 2

Đã thay đổi trong phiên bản 3. 3. Đã thêm đối số từ khóa msg khi được sử dụng làm trình quản lý ngữ cảnh.

assertWarnsRegex(cảnh báo , regex, callable, *args, **kwds)assertWarnsRegex(warning, regex, *, msg=None)

Giống như

python -m unittest tests/test_something.py
307 nhưng cũng kiểm tra xem biểu thức chính quy nào khớp với thông báo của cảnh báo được kích hoạt. regex có thể là một đối tượng biểu thức chính quy hoặc một chuỗi chứa biểu thức chính quy phù hợp để sử dụng bởi
python -m unittest tests/test_something.py
337. Ví dụ

python -m unittest tests/test_something.py
63

hoặc

python -m unittest tests/test_something.py
64

Mới trong phiên bản 3. 2

Đã thay đổi trong phiên bản 3. 3. Đã thêm đối số từ khóa msg khi được sử dụng làm trình quản lý ngữ cảnh.

assertLogs(logger=Không có, level=None)

Trình quản lý ngữ cảnh để kiểm tra xem có ít nhất một thông báo được ghi vào bộ ghi hoặc một trong các phần tử con của nó không, với ít nhất một mức nhất định

Nếu được cung cấp, bộ ghi phải là một đối tượng

python -m unittest tests/test_something.py
347 hoặc một
python -m unittest tests/test_something.py
348 đưa ra tên của bộ ghi. Mặc định là trình ghi nhật ký gốc, trình ghi nhật ký này sẽ bắt tất cả các thư không bị chặn bởi trình ghi nhật ký con cháu không lan truyền

Nếu được cung cấp, cấp phải là cấp ghi số hoặc chuỗi tương đương (ví dụ:

python -m unittest tests/test_something.py
349 hoặc
python -m unittest tests/test_something.py
350). Mặc định là
python -m unittest tests/test_something.py
351

Thử nghiệm vượt qua nếu ít nhất một thông báo được phát ra bên trong khối

python -m unittest tests/test_something.py
328 phù hợp với điều kiện cấp độ và trình ghi nhật ký, nếu không thì không thành công

Đối tượng được trả về bởi trình quản lý bối cảnh là một trình trợ giúp ghi âm giúp theo dõi các thông điệp nhật ký phù hợp. Nó có hai thuộc tính

bản ghi

Danh sách các đối tượng

python -m unittest tests/test_something.py
353 của các thông điệp nhật ký phù hợp

đầu ra

A list of

python -m unittest tests/test_something.py
348 objects with the formatted output of matching messages

Ví dụ

python -m unittest tests/test_something.py
65

Mới trong phiên bản 3. 4

assertNoLogs(logger=Không có, level=None)

Trình quản lý ngữ cảnh để kiểm tra xem không có thông báo nào được ghi vào trình ghi nhật ký hoặc một trong các phần tử con của nó, với ít nhất một mức nhất định

If given, logger should be a

python -m unittest tests/test_something.py
347 object or a
python -m unittest tests/test_something.py
348 giving the name of a logger. Mặc định là root logger, sẽ bắt tất cả các tin nhắn

Nếu được cung cấp, cấp phải là cấp ghi số hoặc chuỗi tương đương (ví dụ:

python -m unittest tests/test_something.py
349 hoặc
python -m unittest tests/test_something.py
350). Mặc định là
python -m unittest tests/test_something.py
351

Không giống như

python -m unittest tests/test_something.py
360, trình quản lý bối cảnh sẽ không trả lại gì

Mới trong phiên bản 3. 10

Ngoài ra còn có các phương pháp khác được sử dụng để thực hiện kiểm tra cụ thể hơn, chẳng hạn như

Phương pháp

Kiểm tra xem

Mới

python -m unittest tests/test_something.py
361

python -m unittest tests/test_something.py
362

python -m unittest tests/test_something.py
363

python -m unittest tests/test_something.py
364

python -m unittest tests/test_something.py
365

python -m unittest tests/test_something.py
366

3. 1

python -m unittest tests/test_something.py
367

python -m unittest tests/test_something.py
368

3. 1

python -m unittest tests/test_something.py
369

python -m unittest tests/test_something.py
370

3. 1

python -m unittest tests/test_something.py
371

python -m unittest tests/test_something.py
372

3. 1

python -m unittest tests/test_something.py
373

python -m unittest tests/test_something.py
374

3. 1

python -m unittest tests/test_something.py
375

python -m unittest tests/test_something.py
376

3. 2

python -m unittest tests/test_something.py
377

a và b có cùng phần tử trong cùng một số, bất kể thứ tự của chúng

3. 2

assertAlmostEqual(đầu tiên , thứ hai, places=7, msg=None, delta=None)assertNotAlmostEqual(first, second, places=7, msg=None, delta=None)

Kiểm tra xem thứ nhất và thứ hai có xấp xỉ (hoặc không xấp xỉ) bằng nhau bằng cách tính chênh lệch, làm tròn đến số vị trí thập phân đã cho (mặc định là 7) và so sánh với 0. Lưu ý rằng các phương pháp này làm tròn các giá trị đến số vị trí thập phân đã cho (i. e. như hàm

python -m unittest tests/test_something.py
378) và các chữ số không có nghĩa

Nếu delta được cung cấp thay vì vị trí thì chênh lệch giữa thứ nhất và thứ hai phải nhỏ hơn hoặc bằng (hoặc lớn hơn) delta

Cung cấp cả đồng bằng và địa điểm tăng

python -m unittest tests/test_something.py
379

Đã thay đổi trong phiên bản 3. 2. ______2380 tự động coi các đối tượng gần như bằng nhau để so sánh bằng nhau.

python -m unittest tests/test_something.py
381 tự động thất bại nếu các đối tượng so sánh bằng nhau. Đã thêm đối số từ khóa delta.

assertGreater(thứ nhất , thứ hai, msg=None)assertGreaterEqual(first, second, msg=None)assertLess(first, second, msg=None)assertLessEqual(first, second, msg=None)

Kiểm tra cái đầu tiên tương ứng là >, >=, < hoặc <= so với thứ hai tùy thuộc vào tên phương thức. Nếu không, bài kiểm tra sẽ thất bại

python -m unittest tests/test_something.py
66

Mới trong phiên bản 3. 1

assertRegex(văn bản , regex, msg=None)assertNotRegex(text, regex, msg=None)

Kiểm tra xem tìm kiếm regex khớp (hoặc không khớp) văn bản. Trong trường hợp không thành công, thông báo lỗi sẽ bao gồm mẫu và văn bản (hoặc mẫu và phần văn bản khớp không mong muốn). regex có thể là một đối tượng biểu thức chính quy hoặc một chuỗi chứa biểu thức chính quy phù hợp để sử dụng bởi

python -m unittest tests/test_something.py
337

Mới trong phiên bản 3. 1. Đã thêm dưới tên

python -m unittest tests/test_something.py
383.

Đã thay đổi trong phiên bản 3. 2. Phương thức

python -m unittest tests/test_something.py
384 đã được đổi tên thành
python -m unittest tests/test_something.py
385.

Mới trong phiên bản 3. 2. ______2386.

Mới trong phiên bản 3. 5. Tên

python -m unittest tests/test_something.py
387 là bí danh không dùng nữa cho
python -m unittest tests/test_something.py
386.

assertCountEqual(đầu tiên , thứ hai, msg=None)

Kiểm tra trình tự đầu tiên chứa các phần tử giống như thứ hai, bất kể thứ tự của chúng. Khi không, một thông báo lỗi liệt kê sự khác biệt giữa các trình tự sẽ được tạo

Các yếu tố trùng lặp không bị bỏ qua khi so sánh thứ nhất và thứ hai. Nó xác minh xem mỗi phần tử có cùng số đếm trong cả hai chuỗi hay không. Tương đương với.

python -m unittest tests/test_something.py
389 nhưng cũng hoạt động với các chuỗi đối tượng không thể băm

Mới trong phiên bản 3. 2

The

python -m unittest tests/test_something.py
11 method dispatches the equality check for objects of the same type to different type-specific methods. Các phương thức này đã được triển khai cho hầu hết các loại tích hợp sẵn, nhưng cũng có thể đăng ký các phương thức mới bằng cách sử dụng
python -m unittest tests/test_something.py
309

addTypeEqualityFunc(typeobj , function)

Đăng ký một phương thức dành riêng cho loại được gọi bởi

python -m unittest tests/test_something.py
11 để kiểm tra xem hai đối tượng có cùng loạiobj (không phải phân lớp) có so sánh bằng nhau không. hàm phải nhận hai đối số vị trí và đối số từ khóa msg=None thứ ba giống như
python -m unittest tests/test_something.py
11 thực hiện. Nó phải tăng
python -m unittest tests/test_something.py
394 khi phát hiện thấy sự bất bình đẳng giữa hai tham số đầu tiên – có thể cung cấp thông tin hữu ích và giải thích chi tiết về sự bất bình đẳng trong thông báo lỗi

Mới trong phiên bản 3. 1

Danh sách các phương thức cụ thể theo loại được

python -m unittest tests/test_something.py
11 tự động sử dụng được tóm tắt trong bảng sau. Lưu ý rằng thường không cần thiết phải gọi trực tiếp các phương thức này

Phương pháp

Dùng để so sánh

Mới

python -m unittest tests/test_something.py
396

dây

3. 1

python -m unittest tests/test_something.py
397

trình tự

3. 1

python -m unittest tests/test_something.py
398

danh sách

3. 1

python -m unittest tests/test_something.py
399

bộ dữ liệu

3. 1

python -m unittest tests/test_something.py
600

bộ hoặc bộ đông lạnh

3. 1

python -m unittest tests/test_something.py
601

mệnh lệnh

3. 1

assertMultiLineEqual(đầu tiên , thứ hai, msg=None)

Kiểm tra xem chuỗi nhiều dòng đầu tiên có bằng chuỗi thứ hai không. Khi không bằng một khác biệt của hai chuỗi làm nổi bật sự khác biệt sẽ được đưa vào thông báo lỗi. Phương pháp này được sử dụng theo mặc định khi so sánh các chuỗi với

python -m unittest tests/test_something.py
11

Mới trong phiên bản 3. 1

assertSequenceEqual(đầu tiên , thứ hai, msg=None, seq_type=None)

Tests that two sequences are equal. Nếu một seq_type được cung cấp, thì cả thứ nhất và thứ hai phải là phiên bản của seq_type nếu không sẽ xảy ra lỗi. Nếu các trình tự khác nhau, một thông báo lỗi sẽ được tạo để hiển thị sự khác biệt giữa hai trình tự

Phương thức này không được gọi trực tiếp bởi

python -m unittest tests/test_something.py
11, nhưng nó được sử dụng để triển khai
python -m unittest tests/test_something.py
604 và
python -m unittest tests/test_something.py
605

Mới trong phiên bản 3. 1

assertListEqual(đầu tiên , thứ hai, msg=None)assertTupleEqual(first, second, msg=None)

Kiểm tra xem hai danh sách hoặc bộ dữ liệu có bằng nhau không. Nếu không, một thông báo lỗi được tạo chỉ hiển thị sự khác biệt giữa hai. Một lỗi cũng được đưa ra nếu một trong các tham số không đúng loại. These methods are used by default when comparing lists or tuples with

python -m unittest tests/test_something.py
11

Mới trong phiên bản 3. 1

assertSetEqual(đầu tiên , thứ hai, msg=None)

Kiểm tra xem hai tập hợp có bằng nhau không. Nếu không, một thông báo lỗi được tạo liệt kê sự khác biệt giữa các bộ. Phương pháp này được sử dụng theo mặc định khi so sánh các bộ hoặc bộ đóng băng với

python -m unittest tests/test_something.py
11

Thất bại nếu một trong hai thứ nhất hoặc thứ hai không có phương thức

python -m unittest tests/test_something.py
608

Mới trong phiên bản 3. 1

assertDictEqual(đầu tiên , thứ hai, msg=None)

Kiểm tra xem hai từ điển có bằng nhau không. Nếu không, một thông báo lỗi được tạo cho thấy sự khác biệt trong từ điển. Phương pháp này sẽ được sử dụng theo mặc định để so sánh từ điển trong các cuộc gọi tới

python -m unittest tests/test_something.py
11

Mới trong phiên bản 3. 1

Cuối cùng,

python -m unittest -v test_module
3 cung cấp các phương thức và thuộc tính sau

không thành công(tin nhắn=Không có)

Báo hiệu lỗi kiểm tra một cách vô điều kiện, với msg hoặc

python -m unittest tests/test_something.py
52 cho thông báo lỗi

failureException

Thuộc tính lớp này đưa ra ngoại lệ được đưa ra bởi phương thức kiểm tra. Nếu một khung kiểm tra cần sử dụng một ngoại lệ chuyên biệt, có thể mang thông tin bổ sung, thì nó phải phân lớp ngoại lệ này để “chơi công bằng” với khung. Giá trị ban đầu của thuộc tính này là

python -m unittest tests/test_something.py
063

longMessage

Thuộc tính lớp này xác định điều gì sẽ xảy ra khi thông báo lỗi tùy chỉnh được chuyển dưới dạng đối số msg cho lệnh gọi assertXYY không thành công.

python -m unittest tests/test_something.py
613 là giá trị mặc định. Trong trường hợp này, thông báo tùy chỉnh được thêm vào cuối thông báo lỗi tiêu chuẩn. Khi được đặt thành
python -m unittest tests/test_something.py
614, thông báo tùy chỉnh sẽ thay thế thông báo tiêu chuẩn

Cài đặt lớp có thể được ghi đè trong các phương thức thử nghiệm riêng lẻ bằng cách gán một thuộc tính thể hiện, tự. longMessage, to

python -m unittest tests/test_something.py
613 or
python -m unittest tests/test_something.py
614 before calling the assert methods

Cài đặt lớp được đặt lại trước mỗi cuộc gọi thử nghiệm

Mới trong phiên bản 3. 1

maxDiff

Thuộc tính này kiểm soát độ dài tối đa của đầu ra khác biệt bằng cách xác nhận các phương thức báo cáo khác biệt khi thất bại. Nó mặc định là 80*8 ký tự. Các phương thức xác nhận bị ảnh hưởng bởi thuộc tính này là

python -m unittest tests/test_something.py
617 (bao gồm tất cả các phương thức so sánh trình tự ủy quyền cho nó),
python -m unittest tests/test_something.py
618 và
python -m unittest tests/test_something.py
310

Đặt

python -m unittest tests/test_something.py
620 thành
python -m unittest tests/test_something.py
52 có nghĩa là không có độ dài khác biệt tối đa

Mới trong phiên bản 3. 2

Khung kiểm tra có thể sử dụng các phương pháp sau để thu thập thông tin về bài kiểm tra

countTestCases()

Trả về số lượng bài kiểm tra được đại diện bởi đối tượng kiểm tra này. Đối với các trường hợp

python -m unittest -v test_module
3, giá trị này sẽ luôn là
python -m unittest tests/test_something.py
623

defaultTestResult()

Trả về một thể hiện của lớp kết quả thử nghiệm sẽ được sử dụng cho lớp trường hợp thử nghiệm này (nếu không có thể hiện kết quả nào khác được cung cấp cho phương thức

python -m unittest tests/test_something.py
075)

Đối với phiên bản

python -m unittest -v test_module
3, đây sẽ luôn là phiên bản của
python -m unittest tests/test_something.py
037;

id()

Trả về một chuỗi xác định trường hợp thử nghiệm cụ thể. Đây thường là tên đầy đủ của phương thức thử nghiệm, bao gồm tên mô-đun và tên lớp

Mô tả ngắn()

Trả về mô tả của bài kiểm tra hoặc

python -m unittest tests/test_something.py
52 nếu không có mô tả nào được cung cấp. Việc triển khai mặc định của phương thức này trả về dòng đầu tiên trong chuỗi tài liệu của phương thức thử nghiệm, nếu có hoặc
python -m unittest tests/test_something.py
52

Đã thay đổi trong phiên bản 3. 1. Sau 3. 1 điều này đã được thay đổi để thêm tên thử nghiệm vào mô tả ngắn ngay cả khi có chuỗi tài liệu. Điều này gây ra sự cố tương thích với các tiện ích mở rộng không đáng tin cậy nhất và việc thêm tên thử nghiệm đã được chuyển sang

python -m unittest tests/test_something.py
630 trong Python 3. 2.

addCleanup(chức năng , /, *args, **kwargs)

Thêm một chức năng được gọi sau

python -m unittest tests/test_something.py
17 để dọn sạch tài nguyên được sử dụng trong quá trình kiểm tra. Các chức năng sẽ được gọi theo thứ tự ngược lại với thứ tự chúng được thêm vào (LIFO). Chúng được gọi với bất kỳ đối số và đối số từ khóa nào được chuyển vào
python -m unittest tests/test_something.py
632 khi chúng được thêm vào

Nếu

python -m unittest tests/test_something.py
16 không thành công, nghĩa là
python -m unittest tests/test_something.py
17 không được gọi, thì mọi chức năng dọn dẹp được thêm vào sẽ vẫn được gọi

Mới trong phiên bản 3. 1

enterContext(cm)

Nhập trình quản lý ngữ cảnh được cung cấp. Nếu thành công, hãy thêm phương thức

python -m unittest tests/test_something.py
635 của nó làm hàm dọn dẹp trước
python -m unittest tests/test_something.py
632 và trả về kết quả của phương thức
python -m unittest tests/test_something.py
637.

Mới trong phiên bản 3. 11

doCleanups()

Phương thức này được gọi vô điều kiện sau

python -m unittest tests/test_something.py
17 hoặc sau
python -m unittest tests/test_something.py
16 nếu
python -m unittest tests/test_something.py
16 đưa ra một ngoại lệ

Nó chịu trách nhiệm gọi tất cả các chức năng dọn dẹp được thêm bởi

python -m unittest tests/test_something.py
632. Nếu bạn cần các chức năng dọn dẹp được gọi trước
python -m unittest tests/test_something.py
17 thì bạn có thể tự gọi
python -m unittest tests/test_something.py
643

python -m unittest tests/test_something.py
643 bật từng phương thức ra khỏi ngăn xếp của các hàm dọn dẹp, vì vậy nó có thể được gọi bất cứ lúc nào

Mới trong phiên bản 3. 1

classmethod addClassCleanup(hàm , /, *args, **kwargs)

Thêm một chức năng được gọi sau

python -m unittest tests/test_something.py
049 để dọn sạch các tài nguyên được sử dụng trong lớp kiểm tra. Các chức năng sẽ được gọi theo thứ tự ngược lại với thứ tự chúng được thêm vào (LIFO). Chúng được gọi với bất kỳ đối số và đối số từ khóa nào được chuyển vào
python -m unittest tests/test_something.py
646 khi chúng được thêm vào

Nếu

python -m unittest tests/test_something.py
048 không thành công, nghĩa là
python -m unittest tests/test_something.py
049 không được gọi, thì mọi chức năng dọn dẹp được thêm vào sẽ vẫn được gọi

Mới trong phiên bản 3. 8

classmethod enterClassContext(cm)

Nhập trình quản lý ngữ cảnh được cung cấp. Nếu thành công, hãy thêm phương thức

python -m unittest tests/test_something.py
635 của nó dưới dạng hàm dọn dẹp trước
python -m unittest tests/test_something.py
646 và trả về kết quả của phương thức
python -m unittest tests/test_something.py
637.

Mới trong phiên bản 3. 11

classmethod doClassCleanups()

This method is called unconditionally after

python -m unittest tests/test_something.py
049, or after
python -m unittest tests/test_something.py
048 if
python -m unittest tests/test_something.py
048 raises an exception

It is responsible for calling all the cleanup functions added by

python -m unittest tests/test_something.py
646. If you need cleanup functions to be called prior to
python -m unittest tests/test_something.py
049 then you can call
python -m unittest tests/test_something.py
657 yourself

python -m unittest tests/test_something.py
657 pops methods off the stack of cleanup functions one at a time, so it can be called at any time

Mới trong phiên bản 3. 8

class unittest. IsolatedAsyncioTestCase(methodName='runTest')

This class provides an API similar to

python -m unittest -v test_module
3 and also accepts coroutines as test functions

Mới trong phiên bản 3. 8

coroutine asyncSetUp()

Phương pháp được gọi để chuẩn bị vật cố định thử nghiệm. Cái này được gọi sau

python -m unittest tests/test_something.py
16. Điều này được gọi ngay trước khi gọi phương thức thử nghiệm; . Việc thực hiện mặc định không có gì

coroutine asyncTearDown()

Phương thức được gọi ngay sau khi phương thức kiểm tra được gọi và kết quả được ghi lại. Cái này được gọi trước

python -m unittest tests/test_something.py
17. Điều này được gọi ngay cả khi phương thức kiểm tra đưa ra một ngoại lệ, vì vậy việc triển khai trong các lớp con có thể cần phải đặc biệt cẩn thận về việc kiểm tra trạng thái bên trong. Bất kỳ ngoại lệ nào, ngoại trừ
python -m unittest tests/test_something.py
063 hoặc
python -m unittest tests/test_something.py
041, được nêu ra theo phương pháp này sẽ được coi là lỗi bổ sung thay vì lỗi thử nghiệm (do đó làm tăng tổng số lỗi được báo cáo). Phương thức này sẽ chỉ được gọi nếu
python -m unittest tests/test_something.py
666 thành công, bất kể kết quả của phương thức thử nghiệm là gì. Việc thực hiện mặc định không có gì

addAsyncCleanup(chức năng , /, *args, **kwargs)

Phương pháp này chấp nhận một coroutine có thể được sử dụng làm chức năng dọn dẹp

coroutine enterAsyncContext(cm)

Nhập trình quản lý bối cảnh không đồng bộ được cung cấp. If successful, also add its

python -m unittest tests/test_something.py
667 method as a cleanup function by
python -m unittest tests/test_something.py
668 and return the result of the
python -m unittest tests/test_something.py
669 method.

Mới trong phiên bản 3. 11

chạy(kết quả=Không có)

Thiết lập một vòng lặp sự kiện mới để chạy thử nghiệm, thu thập kết quả vào đối tượng

python -m unittest tests/test_something.py
037 được chuyển thành kết quả. Nếu kết quả bị bỏ qua hoặc
python -m unittest tests/test_something.py
52, một đối tượng kết quả tạm thời được tạo (bằng cách gọi phương thức
python -m unittest tests/test_something.py
074) và được sử dụng. Đối tượng kết quả được trả về người gọi của
python -m unittest tests/test_something.py
075. Khi kết thúc kiểm tra, tất cả các tác vụ trong vòng lặp sự kiện đều bị hủy

Một ví dụ minh họa thứ tự

python -m unittest tests/test_something.py
67

Sau khi chạy thử nghiệm,

python -m unittest tests/test_something.py
674 sẽ chứa
python -m unittest tests/test_something.py
675

lớp đơn vị kiểm tra. FunctionTestCase(testFunc , thiết lập=None, tearDown=None, description=None)

Lớp này thực hiện một phần của giao diện

python -m unittest -v test_module
3 cho phép người chạy thử nghiệm thực hiện thử nghiệm, nhưng không cung cấp các phương thức mà mã thử nghiệm có thể sử dụng để kiểm tra và báo cáo lỗi. Điều này được sử dụng để tạo các trường hợp thử nghiệm bằng cách sử dụng mã thử nghiệm kế thừa, cho phép nó được tích hợp vào khung thử nghiệm dựa trên
python -m unittest tests/test_something.py
9

Bí danh không dùng nữa¶

Vì những lý do lịch sử, một số phương pháp

python -m unittest -v test_module
3 có một hoặc nhiều bí danh hiện không được dùng nữa. Bảng sau đây liệt kê các tên chính xác cùng với các bí danh không dùng nữa

Tên phương pháp

bí danh không dùng nữa

bí danh không dùng nữa

python -m unittest tests/test_something.py
11

failUnlessEqual

khẳng địnhEquals

python -m unittest tests/test_something.py
680

failIfEqual

assertNotEquals

python -m unittest tests/test_something.py
12

failUnless

assert_

python -m unittest tests/test_something.py
13

failIf

python -m unittest tests/test_something.py
14

failUnlessRaises

python -m unittest tests/test_something.py
380

failUnlessAlmostEqual

assertAlmostEquals

python -m unittest tests/test_something.py
381

failIfAlmostEqual

assertNotAlmostEquals

python -m unittest tests/test_something.py
385

assertRegexpMatches

python -m unittest tests/test_something.py
386

assertNotRegexpMatches

python -m unittest tests/test_something.py
306

assertRaisesRegexp

Deprecated since version 3. 1. Bí danh fail* được liệt kê trong cột thứ hai không được dùng nữa.

Deprecated since version 3. 2. The assert* aliases listed in the third column have been deprecated.

Deprecated since version 3. 2.

python -m unittest tests/test_something.py
383 and
python -m unittest tests/test_something.py
338 have been renamed to
python -m unittest tests/test_something.py
385 and
python -m unittest tests/test_something.py
306.

Deprecated since version 3. 5. The

python -m unittest tests/test_something.py
387 name is deprecated in favor of
python -m unittest tests/test_something.py
386.

Grouping tests¶

class unittest. TestSuite(tests=())

This class represents an aggregation of individual test cases and test suites. The class presents the interface needed by the test runner to allow it to be run as any other test case. Running a

python -m unittest tests/test_something.py
020 instance is the same as iterating over the suite, running each test individually

Nếu các bài kiểm tra được cung cấp, nó phải là một lần lặp lại của các trường hợp kiểm tra riêng lẻ hoặc các bộ kiểm tra khác sẽ được sử dụng để xây dựng bộ ban đầu. Các phương pháp bổ sung được cung cấp để thêm các trường hợp và bộ thử nghiệm vào bộ sưu tập sau này

Các đối tượng

python -m unittest tests/test_something.py
020 hoạt động giống như các đối tượng
python -m unittest -v test_module
3, ngoại trừ việc chúng không thực sự triển khai thử nghiệm. Thay vào đó, chúng được sử dụng để tổng hợp các bài kiểm tra thành các nhóm bài kiểm tra sẽ được chạy cùng nhau. Some additional methods are available to add tests to
python -m unittest tests/test_something.py
020 instances

addTest(test)

Add a

python -m unittest -v test_module
3 or
python -m unittest tests/test_something.py
020 to the suite

addTests(tests)

Add all the tests from an iterable of

python -m unittest -v test_module
3 and
python -m unittest tests/test_something.py
020 instances to this test suite

This is equivalent to iterating over tests, calling

python -m unittest tests/test_something.py
03 for each element

python -m unittest tests/test_something.py
020 chia sẻ các phương pháp sau với
python -m unittest -v test_module
3

run(result)

Run the tests associated with this suite, collecting the result into the test result object passed as result. Note that unlike

python -m unittest tests/test_something.py
06,
python -m unittest tests/test_something.py
07 requires the result object to be passed in

gỡ lỗi()

Chạy các bài kiểm tra được liên kết với bộ phần mềm này mà không thu thập kết quả. This allows exceptions raised by the test to be propagated to the caller and can be used to support running tests under a debugger

countTestCases()

Return the number of tests represented by this test object, including all individual tests and sub-suites

__iter__()

Tests grouped by a

python -m unittest tests/test_something.py
020 are always accessed by iteration. Subclasses can lazily provide tests by overriding
python -m unittest tests/test_something.py
09. Note that this method may be called several times on a single suite (for example when counting tests or comparing for equality) so the tests returned by repeated iterations before
python -m unittest tests/test_something.py
07 must be the same for each call iteration. After
python -m unittest tests/test_something.py
07, callers should not rely on the tests returned by this method unless the caller uses a subclass that overrides
python -m unittest tests/test_something.py
12 to preserve test references

Changed in version 3. 2. In earlier versions the

python -m unittest tests/test_something.py
020 accessed tests directly rather than through iteration, so overriding
python -m unittest tests/test_something.py
09 wasn’t sufficient for providing tests.

Changed in version 3. 4. In earlier versions the

python -m unittest tests/test_something.py
020 held references to each
python -m unittest -v test_module
3 after
python -m unittest tests/test_something.py
07. Subclasses can restore that behavior by overriding
python -m unittest tests/test_something.py
12.

In the typical usage of a

python -m unittest tests/test_something.py
020 object, the
python -m unittest tests/test_something.py
075 method is invoked by a
python -m unittest tests/test_something.py
21 rather than by the end-user test harness

Loading and running tests¶

lớp đơn vị kiểm tra. TestLoader

The

python -m unittest tests/test_something.py
22 class is used to create test suites from classes and modules. Normally, there is no need to create an instance of this class; the
python -m unittest tests/test_something.py
9 module provides an instance that can be shared as
python -m unittest tests/test_something.py
24. Using a subclass or instance, however, allows customization of some configurable properties

python -m unittest tests/test_something.py
22 objects have the following attributes

errors

A list of the non-fatal errors encountered while loading tests. Not reset by the loader at any point. Fatal errors are signalled by the relevant method raising an exception to the caller. Non-fatal errors are also indicated by a synthetic test that will raise the original error when run

Mới trong phiên bản 3. 5

python -m unittest tests/test_something.py
22 objects have the following methods

loadTestsFromTestCase(testCaseClass)

Return a suite of all test cases contained in the

python -m unittest -v test_module
3-derived
python -m unittest tests/test_something.py
28

A test case instance is created for each method named by

python -m unittest tests/test_something.py
29. By default these are the method names beginning with
python -m unittest tests/test_something.py
10. If
python -m unittest tests/test_something.py
29 returns no methods, but the
python -m unittest tests/test_something.py
059 method is implemented, a single test case is created for that method instead

loadTestsFromModule(module , pattern=None)

Return a suite of all test cases contained in the given module. This method searches module for classes derived from

python -m unittest -v test_module
3 and creates an instance of the class for each test method defined for the class

Ghi chú

Mặc dù việc sử dụng hệ thống phân cấp của các lớp có nguồn gốc từ

python -m unittest -v test_module
3 có thể thuận tiện trong việc chia sẻ các hàm trợ giúp và đồ đạc, nhưng việc xác định các phương thức kiểm tra trên các lớp cơ sở không nhằm mục đích khởi tạo trực tiếp sẽ không hoạt động tốt với phương thức này. Doing so, however, can be useful when the fixtures are different and defined in subclasses

If a module provides a

python -m unittest tests/test_something.py
35 function it will be called to load the tests. This allows modules to customize test loading. This is the load_tests protocol. The pattern argument is passed as the third argument to
python -m unittest tests/test_something.py
35

Đã thay đổi trong phiên bản 3. 2. Support for

python -m unittest tests/test_something.py
35 added.

Changed in version 3. 5. The undocumented and unofficial use_load_tests default argument is deprecated and ignored, although it is still accepted for backward compatibility. The method also now accepts a keyword-only argument pattern which is passed to

python -m unittest tests/test_something.py
35 as the third argument.

loadTestsFromName(name , module=None)

Return a suite of all test cases given a string specifier

The specifier name is a “dotted name” that may resolve either to a module, a test case class, a test method within a test case class, a

python -m unittest tests/test_something.py
020 instance, or a callable object which returns a
python -m unittest -v test_module
3 or
python -m unittest tests/test_something.py
020 instance. These checks are applied in the order listed here; that is, a method on a possible test case class will be picked up as “a test method within a test case class”, rather than “a callable object”

For example, if you have a module

python -m unittest tests/test_something.py
42 containing a
python -m unittest -v test_module
3-derived class
python -m unittest tests/test_something.py
44 with three test methods (
python -m unittest tests/test_something.py
45,
python -m unittest tests/test_something.py
46, and
python -m unittest tests/test_something.py
47), the specifier
python -m unittest tests/test_something.py
48 would cause this method to return a suite which will run all three test methods. Using the specifier
python -m unittest tests/test_something.py
49 would cause it to return a test suite which will run only the
python -m unittest tests/test_something.py
46 test method. The specifier can refer to modules and packages which have not been imported; they will be imported as a side-effect

The method optionally resolves name relative to the given module

Changed in version 3. 5. If an

python -m unittest tests/test_something.py
51 or
python -m unittest tests/test_something.py
52 occurs while traversing name then a synthetic test that raises that error when run will be returned. These errors are included in the errors accumulated by self. errors.

loadTestsFromNames(names , module=None)

Similar to

python -m unittest tests/test_something.py
53, but takes a sequence of names rather than a single name. The return value is a test suite which supports all the tests defined for each name

getTestCaseNames(testCaseClass)

Return a sorted sequence of method names found within testCaseClass; this should be a subclass of

python -m unittest -v test_module
3

discover(start_dir , pattern='test*. py' , top_level_dir=None)

Find all the test modules by recursing into subdirectories from the specified start directory, and return a TestSuite object containing them. Only test files that match pattern will be loaded. (Using shell style pattern matching. ) Only module names that are importable (i. e. là số nhận dạng Python hợp lệ) sẽ được tải

Tất cả các mô-đun thử nghiệm phải được nhập từ cấp cao nhất của dự án. If the start directory is not the top level directory then the top level directory must be specified separately

Nếu nhập một mô-đun không thành công, chẳng hạn như do lỗi cú pháp, thì lỗi này sẽ được ghi lại dưới dạng một lỗi duy nhất và quá trình khám phá sẽ tiếp tục. If the import failure is due to

python -m unittest tests/test_something.py
041 being raised, it will be recorded as a skip instead of an error

If a package (a directory containing a file named

python -m unittest -v test_module
99) is found, the package will be checked for a
python -m unittest tests/test_something.py
35 function. If this exists then it will be called
python -m unittest tests/test_something.py
58. Test discovery takes care to ensure that a package is only checked for tests once during an invocation, even if the load_tests function itself calls
python -m unittest tests/test_something.py
59

If

python -m unittest tests/test_something.py
35 exists then discovery does not recurse into the package,
python -m unittest tests/test_something.py
35 is responsible for loading all tests in the package

The pattern is deliberately not stored as a loader attribute so that packages can continue discovery themselves. top_level_dir is stored so

python -m unittest tests/test_something.py
35 does not need to pass this argument in to
python -m unittest tests/test_something.py
63

start_dir can be a dotted module name as well as a directory

Mới trong phiên bản 3. 2

Changed in version 3. 4. Các mô-đun tăng

python -m unittest tests/test_something.py
041 khi nhập được ghi lại là bỏ qua, không phải lỗi.

Changed in version 3. 4. start_dir can be a namespace packages .

Changed in version 3. 4. Paths are sorted before being imported so that execution order is the same even if the underlying file system’s ordering is not dependent on file name.

Changed in version 3. 5. Found packages are now checked for

python -m unittest tests/test_something.py
35 regardless of whether their path matches pattern, because it is impossible for a package name to match the default pattern.

Đã thay đổi trong phiên bản 3. 11. start_dir không được là gói không gian tên . It has been broken since Python 3. 7 và Trăn 3. 11 chính thức loại bỏ nó.

Các thuộc tính sau của

python -m unittest tests/test_something.py
22 có thể được cấu hình bằng cách phân lớp hoặc gán trên một phiên bản

testMethodPrefix

Chuỗi đưa ra tiền tố của tên phương thức sẽ được hiểu là phương thức thử nghiệm. The default value is

python -m unittest tests/test_something.py
67

Điều này ảnh hưởng đến

python -m unittest tests/test_something.py
29 và tất cả các phương thức của
python -m unittest tests/test_something.py
69

sortTestMethodsSử dụng

Function to be used to compare method names when sorting them in

python -m unittest tests/test_something.py
29 and all the
python -m unittest tests/test_something.py
69 methods

suiteClass

Đối tượng có thể gọi được xây dựng bộ thử nghiệm từ danh sách các thử nghiệm. No methods on the resulting object are needed. The default value is the

python -m unittest tests/test_something.py
020 class

This affects all the

python -m unittest tests/test_something.py
69 methods

testNamePatterns

List of Unix shell-style wildcard test name patterns that test methods have to match to be included in test suites (see

python -m unittest tests/test_something.py
19 option)

Nếu thuộc tính này không phải là

python -m unittest tests/test_something.py
52 (mặc định), thì tất cả các phương thức kiểm tra được đưa vào bộ kiểm tra phải khớp với một trong các mẫu trong danh sách này. Note that matches are always performed using
python -m unittest tests/test_something.py
55, so unlike patterns passed to the
python -m unittest tests/test_something.py
19 option, simple substring patterns will have to be converted using
python -m unittest tests/test_something.py
54 wildcards

This affects all the

python -m unittest tests/test_something.py
69 methods

New in version 3. 7

lớp đơn vị kiểm tra. TestResult

This class is used to compile information about which tests have succeeded and which have failed

A

python -m unittest tests/test_something.py
037 object stores the results of a set of tests. The
python -m unittest -v test_module
3 and
python -m unittest tests/test_something.py
020 classes ensure that results are properly recorded; test authors do not need to worry about recording the outcome of tests

Các khung thử nghiệm được xây dựng dựa trên

python -m unittest tests/test_something.py
9 có thể muốn truy cập vào đối tượng
python -m unittest tests/test_something.py
037 được tạo bằng cách chạy một bộ thử nghiệm cho mục đích báo cáo;

python -m unittest tests/test_something.py
037 instances have the following attributes that will be of interest when inspecting the results of running a set of tests

errors

Một danh sách chứa 2 bộ dữ liệu của các phiên bản

python -m unittest -v test_module
3 và các chuỗi chứa các dấu vết được định dạng. Each tuple represents a test which raised an unexpected exception

lỗi

A list containing 2-tuples of

python -m unittest -v test_module
3 instances and strings holding formatted tracebacks. Each tuple represents a test where a failure was explicitly signalled using the
python -m unittest tests/test_something.py
90 methods

skipped

A list containing 2-tuples of

python -m unittest -v test_module
3 instances and strings holding the reason for skipping the test

Mới trong phiên bản 3. 1

expectedFailures

Một danh sách chứa 2 bộ dữ liệu của các phiên bản

python -m unittest -v test_module
3 và các chuỗi chứa các dấu vết được định dạng. Each tuple represents an expected failure or error of the test case

Thành công bất ngờ

A list containing

python -m unittest -v test_module
3 instances that were marked as expected failures, but succeeded

nên Dừng lại

Đặt thành

python -m unittest tests/test_something.py
613 khi quá trình thực hiện kiểm tra sẽ dừng lại trước
python -m unittest tests/test_something.py
95

testsRun

The total number of tests run so far

bộ đệm

If set to true,

python -m unittest tests/test_something.py
96 and
python -m unittest tests/test_something.py
97 will be buffered in between
python -m unittest tests/test_something.py
98 and
python -m unittest tests/test_something.py
99 being called. Đầu ra được thu thập sẽ chỉ được lặp lại trên
python -m unittest tests/test_something.py
96 và
python -m unittest tests/test_something.py
97 thực nếu thử nghiệm không thành công hoặc có lỗi. Any output is also attached to the failure / error message

Mới trong phiên bản 3. 2

failfast

If set to true

python -m unittest tests/test_something.py
95 will be called on the first failure or error, halting the test run

Mới trong phiên bản 3. 2

tb_locals

If set to true then local variables will be shown in tracebacks

Mới trong phiên bản 3. 5

wasSuccessful()

Return

python -m unittest tests/test_something.py
613 if all tests run so far have passed, otherwise returns
python -m unittest tests/test_something.py
614

Changed in version 3. 4. Returns

python -m unittest tests/test_something.py
614 if there were any
python -m unittest -v test_module
06 from tests marked with the
python -m unittest tests/test_something.py
043 decorator.

stop()

This method can be called to signal that the set of tests being run should be aborted by setting the

python -m unittest -v test_module
08 attribute to
python -m unittest tests/test_something.py
613. Các đối tượng
python -m unittest tests/test_something.py
21 phải tôn trọng cờ này và quay lại mà không chạy bất kỳ kiểm tra bổ sung nào

For example, this feature is used by the

python -m unittest -v test_module
11 class to stop the test framework when the user signals an interrupt from the keyboard. Interactive tools which provide
python -m unittest tests/test_something.py
21 implementations can use this in a similar manner

Các phương thức sau của lớp

python -m unittest tests/test_something.py
037 được sử dụng để duy trì cấu trúc dữ liệu nội bộ và có thể được mở rộng trong các lớp con để hỗ trợ các yêu cầu báo cáo bổ sung. Điều này đặc biệt hữu ích trong việc xây dựng các công cụ hỗ trợ báo cáo tương tác trong khi chạy thử nghiệm

startTest(test)

Được gọi khi test case chuẩn bị chạy

stopTest(test)

Được gọi sau khi test case test đã được thực thi, bất kể kết quả như thế nào

startTestRun()

Được gọi một lần trước khi bất kỳ kiểm tra nào được thực hiện

Mới trong phiên bản 3. 1

stopTestRun()

Called once after all tests are executed

Mới trong phiên bản 3. 1

addError(test , err)

Được gọi khi kiểm tra trường hợp thử nghiệm phát sinh một ngoại lệ không mong muốn. err là một bộ có dạng được trả về bởi

python -m unittest -v test_module
14.
python -m unittest -v test_module
15

The default implementation appends a tuple

python -m unittest -v test_module
16 to the instance’s
python -m unittest -v test_module
17 attribute, where formatted_err is a formatted traceback derived from err

addFailure(kiểm tra , err)

Được gọi khi kiểm tra trường hợp thử nghiệm báo hiệu lỗi. err is a tuple of the form returned by

python -m unittest -v test_module
14.
python -m unittest -v test_module
15

Việc triển khai mặc định sẽ nối một bộ

python -m unittest -v test_module
16 vào thuộc tính
python -m unittest -v test_module
21 của cá thể, trong đó formatted_err là một truy nguyên được định dạng bắt nguồn từ err

addSuccess(kiểm tra)

Được gọi khi test case test thành công

Việc thực hiện mặc định không có gì

addSkip(kiểm tra , lý do)

Called when the test case test is skipped. lý do là lý do bài kiểm tra đưa ra để bỏ qua

Việc triển khai mặc định nối thêm một tuple

python -m unittest -v test_module
22 vào thuộc tính
python -m unittest -v test_module
23 của cá thể

addExpectedFailure(test , err)

Được gọi khi kiểm tra trường hợp thử nghiệm không thành công hoặc có lỗi, nhưng được đánh dấu bằng trình trang trí

python -m unittest tests/test_something.py
043

Việc triển khai mặc định sẽ nối thêm một bộ

python -m unittest -v test_module
16 vào thuộc tính
python -m unittest -v test_module
26 của cá thể, trong đó formatted_err là một truy nguyên được định dạng bắt nguồn từ err

addUnexpectedSuccess(test)

Được gọi khi kiểm thử trường hợp thử nghiệm được đánh dấu bằng trình trang trí

python -m unittest tests/test_something.py
043, nhưng đã thành công

Việc triển khai mặc định nối thêm thử nghiệm vào thuộc tính

python -m unittest -v test_module
06 của cá thể

addSubTest(test , subtest , outcome)

Được gọi khi một subtest kết thúc. test is the test case corresponding to the test method. bài kiểm tra phụ là một phiên bản

python -m unittest -v test_module
3 tùy chỉnh mô tả bài kiểm tra phụ

If outcome is

python -m unittest tests/test_something.py
52, the subtest succeeded. Mặt khác, nó không thành công với một ngoại lệ trong đó kết quả là một bộ có dạng được trả về bởi
python -m unittest -v test_module
14.
python -m unittest -v test_module
15

Việc triển khai mặc định không làm gì khi kết quả thành công và ghi lại các lỗi kiểm tra phụ như các lỗi thông thường

Mới trong phiên bản 3. 4

class unittest. TextTestResult(luồng , mô tả, verbosity)

A concrete implementation of

python -m unittest tests/test_something.py
037 used by the
python -m unittest -v test_module
11

New in version 3. 2. This class was previously named

python -m unittest -v test_module
35. The old name still exists as an alias but is deprecated.

đơn vị nhất. defaultTestLoader

Thể hiện của lớp

python -m unittest tests/test_something.py
22 dự định được chia sẻ. If no customization of the
python -m unittest tests/test_something.py
22 is needed, this instance can be used instead of repeatedly creating new instances

lớp đơn vị kiểm tra. TextTestRunner(stream=None , descriptions=True , verbosity=1 , failfast=False , buffer=False , resultclass=None , warnings=None , * , tb_locals=False)

A basic test runner implementation that outputs results to a stream. Nếu luồng là

python -m unittest tests/test_something.py
52, mặc định,
python -m unittest tests/test_something.py
97 được sử dụng làm luồng đầu ra. Lớp này có một vài tham số có thể cấu hình, nhưng về cơ bản thì rất đơn giản. Các ứng dụng đồ họa chạy bộ thử nghiệm sẽ cung cấp các triển khai thay thế. Such implementations should accept
python -m unittest -v test_module
40 as the interface to construct runners changes when features are added to unittest

Theo mặc định, trình chạy này hiển thị

python -m unittest -v test_module
41,
python -m unittest -v test_module
42,
python -m unittest -v test_module
43 và
python -m unittest -v test_module
44 ngay cả khi chúng bị bỏ qua theo mặc định . Deprecation warnings caused by deprecated unittest methods are also special-cased and, when the warning filters are
python -m unittest -v test_module
45 or
python -m unittest -v test_module
46, they will appear only once per-module, in order to avoid too many warning messages. This behavior can be overridden using Python’s
python -m unittest -v test_module
47 or
python -m unittest -v test_module
48 options (see Warning control ) and leaving warnings to
python -m unittest tests/test_something.py
52.

Changed in version 3. 2. Added the

python -m unittest -v test_module
50 argument.

Đã thay đổi trong phiên bản 3. 2. The default stream is set to

python -m unittest tests/test_something.py
97 at instantiation time rather than import time.

Changed in version 3. 5. Đã thêm thông số tb_locals.

_makeResult()

Phương thức này trả về phiên bản của

python -m unittest tests/test_something.py
037 được sử dụng bởi
python -m unittest tests/test_something.py
075. It is not intended to be called directly, but can be overridden in subclasses to provide a custom
python -m unittest tests/test_something.py
037

python -m unittest -v test_module
55 instantiates the class or callable passed in the
python -m unittest -v test_module
11 constructor as the
python -m unittest -v test_module
57 argument. It defaults to
python -m unittest tests/test_something.py
630 if no
python -m unittest -v test_module
57 is provided. The result class is instantiated with the following arguments

python -m unittest tests/test_something.py
68

run(test)

Phương thức này là giao diện công khai chính của

python -m unittest -v test_module
11. This method takes a
python -m unittest tests/test_something.py
020 or
python -m unittest -v test_module
3 instance. A
python -m unittest tests/test_something.py
037 is created by calling
python -m unittest -v test_module
55 and the test(s) are run and the results printed to stdout

unittest. chính(mô-đun=' . defaultTestLoader, defaultTest=None, argv=None, testRunner=None, testLoader=unittest.defaultTestLoader , thoát=True, verbosity=1, failfast=None, catchbreak=None, buffer=None, warnings=None)

Một chương trình dòng lệnh tải một tập hợp các bài kiểm tra từ mô-đun và chạy chúng; . The simplest use for this function is to include the following line at the end of a test script

python -m unittest tests/test_something.py
69

Bạn có thể chạy thử nghiệm với thông tin chi tiết hơn bằng cách chuyển vào đối số chi tiết

python -m unittest tests/test_something.py
0

Đối số defaultTest là tên của một thử nghiệm đơn lẻ hoặc một tên thử nghiệm lặp lại để chạy nếu không có tên thử nghiệm nào được chỉ định qua argv. Nếu không được chỉ định hoặc

python -m unittest tests/test_something.py
52 và không có tên kiểm tra nào được cung cấp qua argv, tất cả các kiểm tra được tìm thấy trong mô-đun sẽ được chạy

Đối số argv có thể là danh sách các tùy chọn được chuyển đến chương trình, với phần tử đầu tiên là tên chương trình. Nếu không được chỉ định hoặc

python -m unittest tests/test_something.py
52, các giá trị của
python -m unittest -v test_module
67 được sử dụng

Đối số testRunner có thể là một lớp người chạy thử nghiệm hoặc một thể hiện đã được tạo của nó. Theo mặc định,

python -m unittest -v test_module
68 gọi
python -m unittest -v test_module
69 với mã thoát cho biết thành công hay thất bại của quá trình chạy thử nghiệm

Đối số testLoader phải là phiên bản

python -m unittest tests/test_something.py
22 và mặc định là
python -m unittest -v test_module
71

Hỗ trợ

python -m unittest -v test_module
68 được sử dụng từ trình thông dịch tương tác bằng cách chuyển vào đối số
python -m unittest -v test_module
73. Điều này hiển thị kết quả trên đầu ra tiêu chuẩn mà không cần gọi
python -m unittest -v test_module
69

python -m unittest tests/test_something.py
1

Các tham số failfast, catchbreak và buffer có tác dụng tương tự như các tùy chọn dòng lệnh cùng tên

The warnings argument specifies the warning filter that should be used while running the tests. Nếu nó không được chỉ định, nó sẽ vẫn là

python -m unittest tests/test_something.py
52 nếu tùy chọn
python -m unittest -v test_module
76 được chuyển cho python (xem Kiểm soát cảnh báo ), nếu không, nó sẽ được đặt thành
python -m unittest -v test_module
45.

Gọi

python -m unittest -v test_module
68 thực sự trả về một thể hiện của lớp
python -m unittest -v test_module
79. Điều này lưu trữ kết quả của các lần chạy thử nghiệm dưới dạng thuộc tính
python -m unittest -v test_module
80

Đã thay đổi trong phiên bản 3. 1. Tham số thoát đã được thêm vào.

Đã thay đổi trong phiên bản 3. 2. Các tham số độ chi tiết, failfast, catchbreak, bộ đệm và cảnh báo đã được thêm vào.

Changed in version 3. 4. Tham số defaultTest đã được thay đổi để cũng chấp nhận tên thử nghiệm có thể lặp lại.

load_tests Giao thức¶

Mới trong phiên bản 3. 2

Các mô-đun hoặc gói có thể tùy chỉnh cách các bài kiểm tra được tải từ chúng trong quá trình chạy thử nghiệm thông thường hoặc phát hiện thử nghiệm bằng cách triển khai một chức năng có tên là

python -m unittest tests/test_something.py
35

Nếu một mô-đun thử nghiệm xác định

python -m unittest tests/test_something.py
35 thì nó sẽ được gọi bởi
python -m unittest -v test_module
83 với các đối số sau

python -m unittest tests/test_something.py
2

nơi mẫu được truyền thẳng từ

python -m unittest -v test_module
84. Nó mặc định là
python -m unittest tests/test_something.py
52

Nó sẽ trả về một

python -m unittest tests/test_something.py
020

trình tải là ví dụ của

python -m unittest tests/test_something.py
22 đang tải. standard_tests là các bài kiểm tra sẽ được tải theo mặc định từ mô-đun. Thông thường, các mô-đun thử nghiệm chỉ muốn thêm hoặc xóa các thử nghiệm khỏi bộ thử nghiệm tiêu chuẩn. Đối số thứ ba được sử dụng khi tải các gói như một phần của khám phá thử nghiệm

Một hàm

python -m unittest tests/test_something.py
35 điển hình tải các bài kiểm tra từ một tập hợp các lớp
python -m unittest -v test_module
3 cụ thể có thể giống như

python -m unittest tests/test_something.py
3

Nếu khám phá được bắt đầu trong một thư mục chứa một gói, từ dòng lệnh hoặc bằng cách gọi

python -m unittest -v test_module
85, thì gói
python -m unittest -v test_module
99 sẽ được kiểm tra cho
python -m unittest tests/test_something.py
35. Nếu chức năng đó không tồn tại, khám phá sẽ lặp lại trong gói như thể nó chỉ là một thư mục khác. Mặt khác, việc khám phá các bài kiểm tra của gói sẽ bị bỏ lại cho đến khi
python -m unittest tests/test_something.py
35 được gọi với các đối số sau

python -m unittest tests/test_something.py
2

Điều này sẽ trả về một

python -m unittest tests/test_something.py
020 đại diện cho tất cả các bài kiểm tra từ gói. (
python -m unittest -v test_module
95 sẽ chỉ chứa các bài kiểm tra được thu thập từ
python -m unittest -v test_module
99. )

Vì mẫu được chuyển vào

python -m unittest tests/test_something.py
35 nên gói được tự do tiếp tục (và có khả năng sửa đổi) khám phá thử nghiệm. Chức năng 'không làm gì'
python -m unittest tests/test_something.py
35 cho gói thử nghiệm sẽ như thế nào

python -m unittest tests/test_something.py
5

Đã thay đổi trong phiên bản 3. 5. Discovery không còn kiểm tra tên gói để tìm mẫu khớp do không thể có tên gói khớp với mẫu mặc định.

Thiết bị cố định lớp và mô-đun¶

Đồ đạc cấp lớp và mô-đun được triển khai vào

python -m unittest tests/test_something.py
020. Khi bộ kiểm tra gặp một bài kiểm tra từ một lớp mới thì
python -m unittest tests/test_something.py
049 từ lớp trước đó (nếu có) được gọi, tiếp theo là
python -m unittest tests/test_something.py
048 từ lớp mới

Tương tự, nếu thử nghiệm từ một mô-đun khác với thử nghiệm trước đó thì

python -m unittest tests/test_something.py
102 từ mô-đun trước đó sẽ được chạy, tiếp theo là
python -m unittest tests/test_something.py
103 từ mô-đun mới

Sau khi tất cả các thử nghiệm đã chạy,

python -m unittest tests/test_something.py
070 và
python -m unittest tests/test_something.py
102 cuối cùng sẽ được chạy

Lưu ý rằng các thiết bị cố định được chia sẻ không hoạt động tốt với các tính năng [tiềm năng] như song song hóa thử nghiệm và chúng phá vỡ sự cô lập thử nghiệm. They should be used with care

Thứ tự mặc định của các bài kiểm tra được tạo bởi bộ tải kiểm tra unittest là nhóm tất cả các bài kiểm tra từ cùng các mô-đun và lớp lại với nhau. Điều này sẽ dẫn đến việc

python -m unittest tests/test_something.py
068 /
python -m unittest tests/test_something.py
103 (v.v.) được gọi chính xác một lần cho mỗi lớp và mô-đun. Nếu bạn sắp xếp thứ tự ngẫu nhiên, để các bài kiểm tra từ các mô-đun và lớp khác nhau liền kề nhau, thì các hàm cố định được chia sẻ này có thể được gọi nhiều lần trong một lần chạy thử nghiệm

Shared fixtures are not intended to work with suites with non-standard ordering. Một

python -m unittest tests/test_something.py
108 vẫn tồn tại đối với các khung không muốn hỗ trợ đồ đạc được chia sẻ

Nếu có bất kỳ ngoại lệ nào được đưa ra trong một trong các chức năng cố định được chia sẻ, thử nghiệm sẽ được báo cáo là lỗi. Bởi vì không có phiên bản thử nghiệm tương ứng, một đối tượng

python -m unittest tests/test_something.py
109 (có cùng giao diện với
python -m unittest -v test_module
3) được tạo để biểu thị lỗi. Nếu bạn chỉ đang sử dụng trình chạy thử nghiệm unittest tiêu chuẩn thì chi tiết này không thành vấn đề, nhưng nếu bạn là tác giả của framework thì nó có thể liên quan

setUpClass và TearsDownClass¶

Chúng phải được thực hiện như các phương thức lớp

python -m unittest tests/test_something.py
6

Nếu bạn muốn gọi

python -m unittest tests/test_something.py
068 và
python -m unittest tests/test_something.py
070 trên các lớp cơ sở thì bạn phải tự gọi chúng. Việc triển khai trong
python -m unittest -v test_module
3 trống

Nếu một ngoại lệ được đưa ra trong một

python -m unittest tests/test_something.py
068 thì các bài kiểm tra trong lớp sẽ không chạy và
python -m unittest tests/test_something.py
070 không chạy. Skipped classes will not have
python -m unittest tests/test_something.py
068 or
python -m unittest tests/test_something.py
070 run. Nếu ngoại lệ là ngoại lệ
python -m unittest tests/test_something.py
041 thì lớp sẽ được báo cáo là đã bị bỏ qua thay vì lỗi

setUpModule and tearDownModule¶

Chúng nên được thực hiện như các chức năng

python -m unittest tests/test_something.py
7

If an exception is raised in a

python -m unittest tests/test_something.py
103 then none of the tests in the module will be run and the
python -m unittest tests/test_something.py
102 will not be run. If the exception is a
python -m unittest tests/test_something.py
041 exception then the module will be reported as having been skipped instead of as an error

Để thêm mã dọn dẹp phải chạy ngay cả trong trường hợp ngoại lệ, hãy sử dụng

python -m unittest tests/test_something.py
122

đơn vị nhất. addModuleCleanup(chức năng , /, *args, **kwargs)

Thêm một chức năng được gọi sau

python -m unittest tests/test_something.py
051 để dọn dẹp các tài nguyên được sử dụng trong lớp kiểm tra. Các chức năng sẽ được gọi theo thứ tự ngược lại với thứ tự chúng được thêm vào (LIFO). Chúng được gọi với bất kỳ đối số và đối số từ khóa nào được chuyển vào
python -m unittest tests/test_something.py
124 khi chúng được thêm vào

Nếu

python -m unittest tests/test_something.py
050 không thành công, nghĩa là
python -m unittest tests/test_something.py
051 không được gọi, thì mọi chức năng dọn dẹp được thêm vào sẽ vẫn được gọi

Mới trong phiên bản 3. 8

classmethod unittest. enterModuleContext(cm)

Nhập trình quản lý ngữ cảnh được cung cấp. Nếu thành công, hãy thêm phương thức

python -m unittest tests/test_something.py
635 của nó làm hàm dọn dẹp trước
python -m unittest tests/test_something.py
124 và trả về kết quả của phương thức
python -m unittest tests/test_something.py
637.

Mới trong phiên bản 3. 11

đơn vị nhất. doModuleCleanups()

Hàm này được gọi vô điều kiện sau

python -m unittest tests/test_something.py
051 hoặc sau
python -m unittest tests/test_something.py
050 nếu
python -m unittest tests/test_something.py
050 đưa ra một ngoại lệ

Nó chịu trách nhiệm gọi tất cả các chức năng dọn dẹp được thêm bởi

python -m unittest tests/test_something.py
124. Nếu bạn cần gọi hàm dọn dẹp trước
python -m unittest tests/test_something.py
051 thì bạn có thể tự gọi
python -m unittest tests/test_something.py
135

python -m unittest tests/test_something.py
135 bật từng phương thức ra khỏi ngăn xếp của các hàm dọn dẹp, vì vậy nó có thể được gọi bất cứ lúc nào

Mới trong phiên bản 3. 8

Xử lý tín hiệu¶

Mới trong phiên bản 3. 2

Tùy chọn dòng lệnh

python -m unittest tests/test_something.py
137 để unittest, cùng với tham số
python -m unittest tests/test_something.py
138 đến
python -m unittest tests/test_something.py
18, cung cấp khả năng xử lý control-C thân thiện hơn trong quá trình chạy thử. Với hành vi bắt ngắt được kích hoạt, control-C sẽ cho phép hoàn thành kiểm tra hiện đang chạy và quá trình chạy kiểm tra sau đó sẽ kết thúc và báo cáo tất cả các kết quả cho đến nay. Control-c thứ hai sẽ tăng
python -m unittest tests/test_something.py
53 theo cách thông thường

Trình xử lý tín hiệu xử lý control-c cố gắng duy trì khả năng tương thích với mã hoặc các bài kiểm tra cài đặt trình xử lý

python -m unittest tests/test_something.py
141 của riêng chúng. Nếu trình xử lý
python -m unittest tests/test_something.py
9 được gọi nhưng không phải là trình xử lý
python -m unittest tests/test_something.py
141 đã cài đặt, tôi. e. nó đã được thay thế bởi hệ thống đang thử nghiệm và được ủy quyền, sau đó nó gọi trình xử lý mặc định. Đây thường sẽ là hành vi được mong đợi bằng mã thay thế trình xử lý đã cài đặt và ủy quyền cho nó. Đối với các thử nghiệm riêng lẻ cần xử lý
python -m unittest tests/test_something.py
9 control-c bị vô hiệu hóa, có thể sử dụng trình trang trí
python -m unittest tests/test_something.py
145

Có một vài chức năng tiện ích cho các tác giả khung để kích hoạt chức năng xử lý control-c trong các khung kiểm tra

đơn vị nhất. installHandler()

Cài đặt trình xử lý control-c. Khi nhận được một

python -m unittest tests/test_something.py
141 (thường là để phản hồi lại việc người dùng nhấn control-c), tất cả các kết quả đã đăng ký đều có tên là
python -m unittest tests/test_something.py
95

đơn vị nhất. registerResult(kết quả)

Đăng ký một đối tượng

python -m unittest tests/test_something.py
037 để xử lý control-c. Đăng ký một kết quả lưu trữ một tham chiếu yếu đến nó, vì vậy nó không ngăn kết quả bị thu gom rác

Việc đăng ký một đối tượng

python -m unittest tests/test_something.py
037 không có tác dụng phụ nếu tính năng xử lý control-c không được bật, vì vậy các khung kiểm tra có thể đăng ký vô điều kiện tất cả các kết quả mà chúng tạo ra bất kể việc xử lý có được bật hay không

đơn vị nhỏ nhất. removeResult(kết quả)

Xóa kết quả đã đăng ký. Khi một kết quả đã bị xóa thì

python -m unittest tests/test_something.py
95 sẽ không còn được gọi trên đối tượng kết quả đó để phản hồi điều khiển-c

đơn vị nhất. removeHandler(chức năng=Không có)

Khi được gọi mà không có đối số, hàm này sẽ xóa trình xử lý control-c nếu nó đã được cài đặt. Chức năng này cũng có thể được sử dụng làm công cụ trang trí thử nghiệm để tạm thời xóa trình xử lý trong khi thử nghiệm đang được thực thi