Python bắt đầu với

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

Another test-support module with a very different flavor

Simple Smalltalk Testing. With Patterns

Kent Beck’s original paper on testing frameworks using the pattern shared by

python -m unittest tests/test_something.py
9

pytest

Third-party unittest framework with a lighter-weight syntax for writing tests. For example,

python -m unittest -v test_module
6

The Python Testing Tools Taxonomy

An extensive list of Python testing tools including functional testing frameworks and mock object libraries

Testing in Python Mailing List

A special-interest-group for discussion of testing, and testing tools, in Python

The script

python -m unittest -v test_module
7 in the Python source distribution is a GUI tool for test discovery and execution. This is intended largely for ease of use for those new to unit testing. For production environments it is recommended that tests be driven by a continuous integration system such as Buildbot, Jenkins, GitHub Actions, or AppVeyor

Basic example¶

The

python -m unittest tests/test_something.py
9 module provides a rich set of tools for constructing and running tests. This section demonstrates that a small subset of the tools suffice to meet the needs of most users

Here is a short script to test three string methods

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()

A testcase is created by subclassing

python -m unittest -v test_module
9. The three individual tests are defined with methods whose names start with the letters
python -m unittest tests/test_something.py
10. This naming convention informs the test runner about which methods represent tests

The crux of each test is a call to

python -m unittest tests/test_something.py
11 to check for an expected result;
python -m unittest tests/test_something.py
12 or
python -m unittest tests/test_something.py
13 to verify a condition; or
python -m unittest tests/test_something.py
14 to verify that a specific exception gets raised. These methods are used instead of the
python -m unittest tests/test_something.py
15 statement so the test runner can accumulate all test results and produce a report

The

python -m unittest tests/test_something.py
16 and
python -m unittest tests/test_something.py
17 methods allow you to define instructions that will be executed before and after each test method. They are covered in more detail in the section Organizing test code .

The final block shows a simple way to run the tests.

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. When run from the command line, the above script produces an output that looks like this

python -m unittest tests/test_something.py
0

Passing the

python -m unittest tests/test_something.py
19 option to your test script will instruct
python -m unittest tests/test_something.py
18 to enable a higher level of verbosity, and produce the following output

python -m unittest tests/test_something.py
3

The above examples show the most commonly used

python -m unittest tests/test_something.py
9 features which are sufficient to meet many everyday testing needs. The remainder of the documentation explores the full feature set from first principles

Changed in version 3. 11. The behavior of returning a value from a test method (other than the default

python -m unittest tests/test_something.py
52 value), is now deprecated.

Giao diện dòng lệnh¶

The unittest module can be used from the command line to run tests from modules, classes or even individual test methods

python -m unittest tests/test_something.py
6

You can pass in a list with any combination of module names, and fully qualified class or method names

Test modules can be specified by file path as well

python -m unittest tests/test_something.py

This allows you to use the shell filename completion to specify the test module. The file specified must still be importable as a module. The path is converted to a module name by removing the ‘. py’ and converting path separators into ‘. ’. If you want to execute a test file that isn’t importable as a module you should execute the file directly instead

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

When executed without arguments Test Discovery is started.

python -m unittest tests/test_something.py
1

For a list of all the command-line options

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 during the test run waits for the current test to end and then reports all the results so far. A second Control-C raises the normal

python -m unittest tests/test_something.py
53 exception

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. The command-line options

python -m unittest -v test_module
80,
python -m unittest -v test_module
81 and
python -m unittest -v test_module
82 were added.

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

Test Discovery¶

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

Unittest hỗ trợ khám phá thử nghiệm đơn giản. In order to be compatible with test discovery, all of the test files must be modules or packages 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. Once test discovery has found all the test files from the start directory you specify it turns the paths into package names to import. Ví dụ:

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

If you have a package installed globally and attempt test discovery on a different copy of the package then the import could happen from the wrong place. 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

If you supply the start directory as a package name rather than a path to a directory then discover assumes that whichever location it imports from is the location you intended, so you will not get the warning

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. To make your own test cases you must write subclasses of
python -m unittest -v test_module
3 or use
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ẻ. Thus

python -m unittest tests/test_something.py
16,
python -m unittest tests/test_something.py
17, and
python -m unittest tests/test_something.py
017 will be called once per test

It is recommended that you use TestCase implementations to group tests together according to the features they test.

python -m unittest tests/test_something.py
9 cung cấp một cơ chế cho việc này. the test suite, represented by
python -m unittest tests/test_something.py
9’s
python -m unittest tests/test_something.py
020 class. 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ột 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

  • The test code can more easily be separated from shipped code

  • Í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 pháp. 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(msg=None , **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

All the assert methods accept a msg argument that, if specified, is used as the error message on failure (see also

python -m unittest tests/test_something.py
304). Note that the msg keyword argument can be passed to
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 only when they are used as a context manager

assertEqual(first , second , 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ể.

Changed in version 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(first , second , msg=None)

Kiểm tra thứ nhất và thứ hai không bằng nhau. If the values do compare equal, the test will fail

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

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

Note that this is equivalent to

python -m unittest tests/test_something.py
311 and not to
python -m unittest tests/test_something.py
312 (use
python -m unittest tests/test_something.py
313 for the latter). 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(first , second , msg=None)assertIsNot(first , second , msg=None)

Test that first and second are (or are not) the same object

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 raises exc and the message matches 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 with minimum level

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ể là đối số msg được đưa ra, 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ý bối 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.

Changed in version 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. Thí 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

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

python -m unittest tests/test_something.py
348 với đầu ra được định dạng của các thông báo phù hợp

Thí 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

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à 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ông khớp với nhau). 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

Phương thức

python -m unittest tests/test_something.py
11 gửi kiểm tra đẳng thức cho các đối tượng cùng loại đến các phương thức dành riêng cho loại khác nhau. 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)

Kiểm tra xem hai dãy có bằng nhau không. 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. Các phương thức này được sử dụng theo mặc định khi so sánh danh sách hoặc bộ dữ liệu với

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, đến

python -m unittest tests/test_something.py
613 hoặc
python -m unittest tests/test_something.py
614 trước khi gọi các phương thức xác nhận

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()

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

python -m unittest tests/test_something.py
049 hoặc sau
python -m unittest tests/test_something.py
048 nếu
python -m unittest tests/test_something.py
048 đư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
646. Nếu bạn cần gọi hàm dọn dẹp trước
python -m unittest tests/test_something.py
049 thì bạn có thể tự gọi
python -m unittest tests/test_something.py
657

python -m unittest tests/test_something.py
657 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

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

Lớp này cung cấp một API tương tự như

python -m unittest -v test_module
3 và cũng chấp nhận các coroutine làm chức năng kiểm tra

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 đưa 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. Nếu thành công, hãy thêm phương thức

python -m unittest tests/test_something.py
667 của nó làm chức năng dọn dẹp trước
python -m unittest tests/test_something.py
668 và trả về kết quả của phương thức
python -m unittest tests/test_something.py
669.

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

khẳng địnhNotEquals

python -m unittest tests/test_something.py
12

thất bạiTrừ khi

khẳng định_

python -m unittest tests/test_something.py
13

failIf

python -m unittest tests/test_something.py
14

thất bạiTrừ khi tăng

python -m unittest tests/test_something.py
380

thất bạiTrừ khi Hầu như Bình đẳng

khẳng địnhAlmostEquals

python -m unittest tests/test_something.py
381

failIfAlmostEqual

khẳng địnhNotAlmostEquals

python -m unittest tests/test_something.py
385

khẳng địnhRegexpMatch

python -m unittest tests/test_something.py
386

khẳng địnhNotRegexpMatches

python -m unittest tests/test_something.py
306

khẳng địnhRaisesRegexp

Không dùng nữa kể từ phiên bản 3. 1. Bí danh fail* được liệt kê trong cột thứ hai không được dùng nữa.

Không dùng nữa kể từ phiên bản 3. 2. Các bí danh khẳng định* được liệt kê trong cột thứ ba không được dùng nữa.

Không dùng nữa kể từ phiên bản 3. 2. ______2383 và

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

Không dùng nữa kể từ phiên bản 3. 5. Tên

python -m unittest tests/test_something.py
387 không được dùng nữa để thay thế bằng tên
python -m unittest tests/test_something.py
386.

Kiểm tra nhóm¶

lớp đơn vị kiểm tra. TestSuite(các bài kiểm tra=()

Lớp này đại diện cho một tập hợp các trường hợp thử nghiệm riêng lẻ và bộ thử nghiệm. Lớp trình bày giao diện cần thiết cho người chạy thử nghiệm để cho phép nó chạy như bất kỳ trường hợp thử nghiệm nào khác. Chạy phiên bản

python -m unittest tests/test_something.py
020 cũng giống như chạy lặp lại bộ ứng dụng, chạy từng thử nghiệm riêng lẻ

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. Một số phương pháp bổ sung có sẵn để thêm các thử nghiệm vào phiên bản
python -m unittest tests/test_something.py
020

addTest(test)

Thêm một

python -m unittest -v test_module
3 hoặc
python -m unittest tests/test_something.py
020 vào bộ

addTests(tests)

Thêm tất cả các thử nghiệm từ phiên bản có thể lặp lại của

python -m unittest -v test_module
3 và
python -m unittest tests/test_something.py
020 vào bộ thử nghiệm này

Điều này tương đương với việc lặp lại các bài kiểm tra, gọi

python -m unittest tests/test_something.py
03 cho mỗi phần tử

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

chạy(kết quả)

Chạy các bài kiểm tra được liên kết với bộ phần mềm này, thu thập kết quả vào đối tượng kết quả kiểm tra được chuyển thành kết quả. Lưu ý rằng không giống như

python -m unittest tests/test_something.py
06,
python -m unittest tests/test_something.py
07 yêu cầu đối tượng kết quả được truyền vào

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ả. Đ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

countTestCases()

Trả về số lượng thử nghiệm được đại diện bởi đối tượng thử nghiệm này, bao gồm tất cả các thử nghiệm riêng lẻ và bộ con

__iter__()

Các bài kiểm tra được nhóm theo một

python -m unittest tests/test_something.py
020 luôn được truy cập bằng cách lặp lại. Các lớp con có thể lười biếng cung cấp các bài kiểm tra bằng cách ghi đè
python -m unittest tests/test_something.py
09. Lưu ý rằng phương pháp này có thể được gọi nhiều lần trên một bộ duy nhất (ví dụ: khi đếm các bài kiểm tra hoặc so sánh sự bằng nhau), vì vậy các bài kiểm tra được trả về bởi các lần lặp lại trước
python -m unittest tests/test_something.py
07 phải giống nhau cho mỗi lần lặp lại cuộc gọi. Sau
python -m unittest tests/test_something.py
07, người gọi không nên dựa vào các bài kiểm tra được trả về bởi phương pháp này trừ khi người gọi sử dụng một lớp con ghi đè lên
python -m unittest tests/test_something.py
12 để duy trì các tham chiếu kiểm tra

Đã thay đổi trong phiên bản 3. 2. Trong các phiên bản trước,

python -m unittest tests/test_something.py
020 đã truy cập trực tiếp các bài kiểm tra thay vì thông qua phép lặp, do đó, việc ghi đè
python -m unittest tests/test_something.py
09 là không đủ để cung cấp các bài kiểm tra.

Đã thay đổi trong phiên bản 3. 4. Trong các phiên bản trước,

python -m unittest tests/test_something.py
020 giữ tham chiếu đến từng
python -m unittest -v test_module
3 sau
python -m unittest tests/test_something.py
07. Các lớp con có thể khôi phục hành vi đó bằng cách ghi đè
python -m unittest tests/test_something.py
12.

Trong cách sử dụng thông thường của một đối tượng

python -m unittest tests/test_something.py
020, phương thức
python -m unittest tests/test_something.py
075 được gọi bởi một
python -m unittest tests/test_something.py
21 chứ không phải bởi khai thác thử nghiệm của người dùng cuối

Tải và chạy thử nghiệm¶

lớp đơn vị kiểm tra. Trình tải thử nghiệm

Lớp

python -m unittest tests/test_something.py
22 được sử dụng để tạo các bộ kiểm tra từ các lớp và mô-đun. Thông thường, không cần tạo một thể hiện của lớp này; . Tuy nhiên, việc sử dụng một lớp con hoặc cá thể cho phép tùy chỉnh một số thuộc tính có thể định cấu hình

python -m unittest tests/test_something.py
22 đối tượng có các thuộc tính sau

lỗi

Danh sách các lỗi không nghiêm trọng gặp phải khi tải các bài kiểm tra. Không được thiết lập lại bởi trình tải tại bất kỳ thời điểm nào. Các lỗi nghiêm trọng được báo hiệu bằng phương thức có liên quan, đưa ra một ngoại lệ cho người gọi. Các lỗi không nghiêm trọng cũng được chỉ ra bằng một thử nghiệm tổng hợp sẽ làm tăng lỗi ban đầu khi chạy

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

Các đối tượng

python -m unittest tests/test_something.py
22 có các phương thức sau

loadTestsFromTestCase(testCaseClass)

Trả về một bộ gồm tất cả các trường hợp thử nghiệm có trong

python -m unittest tests/test_something.py
28 có nguồn gốc từ
python -m unittest -v test_module
3

Một phiên bản trường hợp thử nghiệm được tạo cho mỗi phương thức được đặt tên bởi

python -m unittest tests/test_something.py
29. Theo mặc định, đây là những tên phương thức bắt đầu bằng
python -m unittest tests/test_something.py
10. Nếu
python -m unittest tests/test_something.py
29 không trả về phương thức nào, nhưng phương thức
python -m unittest tests/test_something.py
059 được triển khai, thay vào đó, một trường hợp thử nghiệm sẽ được tạo cho phương thức đó

loadTestsFromModule(mô-đun , mẫu=None)

Trả về một bộ tất cả các trường hợp thử nghiệm có trong mô-đun đã cho. Phương thức này tìm kiếm mô-đun cho các lớp bắt nguồn từ

python -m unittest -v test_module
3 và tạo một thể hiện của lớp cho từng phương thức kiểm tra được xác định cho lớp

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. Tuy nhiên, làm như vậy có thể hữu ích khi các đồ đạc khác nhau và được xác định trong các lớp con.

Nếu một mô-đun cung cấp chức năng

python -m unittest tests/test_something.py
35, nó sẽ được gọi để tải các bài kiểm tra. Điều này cho phép các mô-đun tùy chỉnh tải thử nghiệm. Đây là giao thức load_tests. Đối số mẫu được chuyển làm đối số thứ ba cho
python -m unittest tests/test_something.py
35

Đã thay đổi trong phiên bản 3. 2. Đã thêm hỗ trợ cho

python -m unittest tests/test_something.py
35.

Đã thay đổi trong phiên bản 3. 5. Đối số mặc định use_load_tests không có giấy tờ và không chính thức không được chấp nhận và bỏ qua, mặc dù nó vẫn được chấp nhận để tương thích ngược. Phương thức hiện cũng chấp nhận mẫu đối số chỉ từ khóa được chuyển đến

python -m unittest tests/test_something.py
35 làm đối số thứ ba.

loadTestsFromName(tên , mô-đun=None)

Trả về một bộ tất cả các trường hợp kiểm tra được cung cấp một trình xác định chuỗi

Tên chỉ định là một "tên chấm" có thể phân giải thành mô-đun, lớp trường hợp thử nghiệm, phương thức thử nghiệm trong lớp trường hợp thử nghiệm, phiên bản

python -m unittest tests/test_something.py
020 hoặc đối tượng có thể gọi trả về phiên bản
python -m unittest -v test_module
3 hoặc
python -m unittest tests/test_something.py
020. Những kiểm tra này được áp dụng theo thứ tự được liệt kê ở đây;

Ví dụ: nếu bạn có một mô-đun

python -m unittest tests/test_something.py
42 chứa một lớp dẫn xuất từ ​​
python -m unittest -v test_module
3 là
python -m unittest tests/test_something.py
44 với ba phương pháp kiểm tra (
python -m unittest tests/test_something.py
45,
python -m unittest tests/test_something.py
46 và
python -m unittest tests/test_something.py
47), bộ xác định
python -m unittest tests/test_something.py
48 sẽ khiến phương thức này trả về một bộ sẽ chạy cả ba phương pháp kiểm tra. Sử dụng công cụ xác định
python -m unittest tests/test_something.py
49 sẽ khiến nó trả về một bộ thử nghiệm sẽ chỉ chạy phương thức thử nghiệm
python -m unittest tests/test_something.py
46. Trình xác định có thể tham chiếu đến các mô-đun và gói chưa được nhập;

Phương thức tùy chọn giải quyết tên liên quan đến mô-đun đã cho

Đã thay đổi trong phiên bản 3. 5. Nếu một

python -m unittest tests/test_something.py
51 hoặc
python -m unittest tests/test_something.py
52 xảy ra trong khi duyệt tên thì một thử nghiệm tổng hợp phát sinh lỗi đó khi chạy sẽ được trả về. Những lỗi này được bao gồm trong các lỗi được tích lũy bởi bản thân. lỗi.

loadTestsFromNames(tên , mô-đun=None)

Tương tự như

python -m unittest tests/test_something.py
53, nhưng có một chuỗi tên thay vì một tên duy nhất. Giá trị trả về là một bộ thử nghiệm hỗ trợ tất cả các thử nghiệm được xác định cho mỗi tên

getTestCaseNames(testCaseClass)

Trả về một chuỗi các tên phương thức được sắp xếp tìm thấy trong testCaseClass;

khám phá(start_dir , mẫu='test*.py' , top_level_dir=Không có)

Tìm tất cả các mô-đun thử nghiệm bằng cách đệ quy vào các thư mục con từ thư mục bắt đầu đã chỉ định và trả về một đối tượng TestSuite chứa chúng. Chỉ các tệp kiểm tra phù hợp với mẫu mới được tải. (Sử dụng khớp mẫu kiểu vỏ. ) Chỉ những tên mô-đun có thể nhập được (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. Nếu thư mục bắt đầu không phải là thư mục cấp cao nhất thì thư mục cấp cao nhất phải được chỉ định riêng

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. Nếu lỗi nhập là do

python -m unittest tests/test_something.py
041 được nâng lên, nó sẽ được ghi là bỏ qua thay vì lỗi

Nếu một gói (một thư mục chứa tệp có tên

python -m unittest -v test_module
99) được tìm thấy, gói đó sẽ được kiểm tra hàm
python -m unittest tests/test_something.py
35. Nếu điều này tồn tại thì nó sẽ được gọi là
python -m unittest tests/test_something.py
58. Khám phá thử nghiệm cẩn thận để đảm bảo rằng một gói chỉ được kiểm tra các thử nghiệm một lần trong khi gọi, ngay cả khi hàm load_tests tự gọi
python -m unittest tests/test_something.py
59

Nếu

python -m unittest tests/test_something.py
35 tồn tại thì khám phá không lặp lại trong gói,
python -m unittest tests/test_something.py
35 chịu trách nhiệm tải tất cả các bài kiểm tra trong gói

Mẫu được cố tình không lưu trữ dưới dạng thuộc tính trình tải để các gói có thể tiếp tục tự khám phá. top_level_dir được lưu trữ nên

python -m unittest tests/test_something.py
35 không cần chuyển đối số này vào
python -m unittest tests/test_something.py
63

start_dir có thể là tên mô-đun chấm cũng như thư mục

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

Đã thay đổi trong phiên bản 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.

Đã thay đổi trong phiên bản 3. 4. start_dir có thể là một gói không gian tên .

Đã thay đổi trong phiên bản 3. 4. Các đường dẫn được sắp xếp trước khi được nhập để thứ tự thực thi giống nhau ngay cả khi thứ tự của hệ thống tệp cơ bản không phụ thuộc vào tên tệp.

Đã thay đổi trong phiên bản 3. 5. Các gói đã tìm thấy hiện được kiểm tra cho

python -m unittest tests/test_something.py
35 bất kể đường dẫn của chúng có khớp với mẫu hay không, bởi vì tên gói không thể khớp với mẫu mặc định.

Đã thay đổi trong phiên bản 3. 11. start_dir không được là gói không gian tên . Nó đã bị hỏng kể từ 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. Giá trị mặc định là

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

Hàm được sử dụng để so sánh các tên phương thức khi sắp xếp chúng trong

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

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. Không cần phương thức trên đối tượng kết quả. Giá trị mặc định là lớp

python -m unittest tests/test_something.py
020

Điều này ảnh hưởng đến tất cả các phương pháp

python -m unittest tests/test_something.py
69

testNamePatterns

Danh sách các mẫu tên thử nghiệm ký tự đại diện kiểu hệ vỏ Unix mà các phương thức thử nghiệm phải khớp để được đưa vào bộ thử nghiệm (xem tùy chọn

python -m unittest tests/test_something.py
19)

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. Lưu ý rằng các kết quả khớp luôn được thực hiện bằng cách sử dụng
python -m unittest tests/test_something.py
55, do đó, không giống như các mẫu được truyền cho tùy chọn
python -m unittest tests/test_something.py
19, các mẫu chuỗi con đơn giản sẽ phải được chuyển đổi bằng ký tự đại diện
python -m unittest tests/test_something.py
54

Điều này ảnh hưởng đến tất cả các phương pháp

python -m unittest tests/test_something.py
69

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

lớp đơn vị kiểm tra. Kết quả kiểm tra

Lớp này được sử dụng để biên dịch thông tin về bài kiểm tra nào thành công và bài kiểm tra nào thất bại

Một đối tượng

python -m unittest tests/test_something.py
037 lưu trữ kết quả của một tập hợp các bài kiểm tra. Các lớp
python -m unittest -v test_module
3 và
python -m unittest tests/test_something.py
020 đảm bảo rằng các kết quả được ghi lại đúng cách;

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;

Phiên bản

python -m unittest tests/test_something.py
037 có các thuộc tính sau đây sẽ được quan tâm khi kiểm tra kết quả chạy một bộ thử nghiệm

lỗi

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. Mỗi bộ đại diện cho một bài kiểm tra đưa ra một ngoại lệ không mong muốn

lỗi

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. Mỗi bộ dữ liệu đại diện cho một thử nghiệm trong đó lỗi được báo hiệu rõ ràng bằng cách sử dụng các phương thức
python -m unittest tests/test_something.py
90

đã bỏ qua

Một danh sách chứa 2-bộ của các phiên bản

python -m unittest -v test_module
3 và các chuỗi chứa lý do bỏ qua bài kiểm tra

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. Mỗi bộ dữ liệu đại diện cho một lỗi hoặc lỗi dự kiến ​​của trường hợp thử nghiệm

thành công bất ngờ

Danh sách chứa

python -m unittest -v test_module
3 trường hợp được đánh dấu là lỗi dự kiến, nhưng đã thành công

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

Tổng số bài kiểm tra chạy cho đến nay

bộ đệm

Nếu được đặt thành true,

python -m unittest tests/test_something.py
96 và
python -m unittest tests/test_something.py
97 sẽ được lưu vào vùng đệm giữa
python -m unittest tests/test_something.py
98 và
python -m unittest tests/test_something.py
99 được gọi. Đầ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. Bất kỳ đầu ra nào cũng được đính kèm với thông báo lỗi / lỗi

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

không thành công

Nếu được đặt thành true,

python -m unittest tests/test_something.py
95 sẽ được gọi trong lần lỗi hoặc lỗi đầu tiên, tạm dừng quá trình chạy thử

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

tb_locals

Nếu được đặt thành true thì các biến cục bộ sẽ được hiển thị trong truy nguyên

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

wasSuccessful()

Trả lại

python -m unittest tests/test_something.py
613 nếu tất cả các bài kiểm tra chạy cho đến nay đã vượt qua, nếu không thì trả về
python -m unittest tests/test_something.py
614

Đã thay đổi trong phiên bản 3. 4. Trả về

python -m unittest tests/test_something.py
614 nếu có bất kỳ
python -m unittest -v test_module
06 nào từ các bài kiểm tra được đánh dấu bằng trang trí
python -m unittest tests/test_something.py
043.

dừng()

Phương pháp này có thể được gọi để báo hiệu rằng bộ kiểm tra đang chạy phải bị hủy bỏ bằng cách đặt thuộc tính

python -m unittest -v test_module
08 thành
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

Ví dụ: tính năng này được lớp

python -m unittest -v test_module
11 sử dụng để dừng khung kiểm tra khi người dùng báo hiệu ngắt từ bàn phím. Các công cụ tương tác cung cấp triển khai
python -m unittest tests/test_something.py
21 có thể sử dụng điều này theo cách tương tự

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()

Được gọi một lần sau khi tất cả các bài kiểm tra được thực hiện

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 is a tuple of the form returned by

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)

Called when the test case test signals a failure. err is a tuple of the form returned by

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
21 attribute, where formatted_err is a formatted traceback derived from err

addSuccess(test)

Called when the test case test succeeds

The default implementation does nothing

addSkip(test , reason)

Called when the test case test is skipped. reason is the reason the test gave for skipping

The default implementation appends a tuple

python -m unittest -v test_module
22 to the instance’s
python -m unittest -v test_module
23 attribute

addExpectedFailure(test , err)

Called when the test case test fails or errors, but was marked with the

python -m unittest tests/test_something.py
043 decorator

The default implementation appends a tuple

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

addUnexpectedSuccess(test)

Called when the test case test was marked with the

python -m unittest tests/test_something.py
043 decorator, but succeeded

The default implementation appends the test to the instance’s

python -m unittest -v test_module
06 attribute

addSubTest(test , subtest , outcome)

Called when a subtest finishes. test is the test case corresponding to the test method. subtest is a custom

python -m unittest -v test_module
3 instance describing the subtest

If outcome is

python -m unittest tests/test_something.py
52, the subtest succeeded. Otherwise, it failed with an exception where outcome is a tuple of the form returned by
python -m unittest -v test_module
14.
python -m unittest -v test_module
15

The default implementation does nothing when the outcome is a success, and records subtest failures as normal failures

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

class unittest. TextTestResult(stream , descriptions , 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.

unittest. defaultTestLoader

Instance of the

python -m unittest tests/test_something.py
22 class intended to be shared. 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

class unittest. TextTestRunner(stream=None , descriptions=True , verbosity=1 , failfast=False , buffer=False , resultclass=None , warnings=None , * , tb_locals=False)

Một triển khai trình chạy thử nghiệm cơ bản xuất kết quả thành luồng. 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ế. Việc triển khai như vậy phải chấp nhận
python -m unittest -v test_module
40 làm giao diện để xây dựng các trình chạy thay đổi khi các tính năng được thêm vào 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 . Các cảnh báo không dùng nữa do các phương pháp không dùng nữa gây ra cũng là trường hợp đặc biệt và khi các bộ lọc cảnh báo là
python -m unittest -v test_module
45 hoặc
python -m unittest -v test_module
46, chúng sẽ chỉ xuất hiện một lần cho mỗi mô-đun, . Hành vi này có thể bị ghi đè bằng cách sử dụng các tùy chọn
python -m unittest -v test_module
47 hoặc
python -m unittest -v test_module
48 của Python (xem Kiểm soát cảnh báo ) và để lại cảnh báo cho
python -m unittest tests/test_something.py
52.

Đã thay đổi trong phiên bản 3. 2. Đã thêm đối số

python -m unittest -v test_module
50.

Đã thay đổi trong phiên bản 3. 2. Luồng mặc định được đặt thành

python -m unittest tests/test_something.py
97 tại thời điểm khởi tạo thay vì thời điểm nhập.

Đã thay đổi trong phiên bản 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. Nó không có ý định được gọi trực tiếp, nhưng có thể được ghi đè trong các lớp con để cung cấp một
python -m unittest tests/test_something.py
037 tùy chỉnh

python -m unittest -v test_module
55 khởi tạo lớp hoặc có thể gọi được truyền trong hàm tạo
python -m unittest -v test_module
11 dưới dạng đối số
python -m unittest -v test_module
57. Nó mặc định là
python -m unittest tests/test_something.py
630 nếu không cung cấp
python -m unittest -v test_module
57. Lớp kết quả được khởi tạo với các đối số sau

python -m unittest tests/test_something.py
68

chạy(kiểm tra)

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

python -m unittest -v test_module
11. Phương pháp này lấy phiên bản
python -m unittest tests/test_something.py
020 hoặc
python -m unittest -v test_module
3. Một
python -m unittest tests/test_something.py
037 được tạo bằng cách gọi
python -m unittest -v test_module
55 và (các) bài kiểm tra được chạy và kết quả được in ra thiết bị xuất chuẩn

đơn vị nhất. 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; . Cách sử dụng đơn giản nhất cho hàm này là thêm dòng sau vào cuối tập lệnh kiểm tra

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

Đối số cảnh báo chỉ định bộ lọc cảnh báo sẽ được sử dụng trong khi chạy thử nghiệm. 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.

Changed in version 3. 2. The verbosity, failfast, catchbreak, buffer and warnings parameters were added.

Đã thay đổi trong phiên bản 3. 4. The defaultTest parameter was changed to also accept an iterable of test names.

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. It defaults to
python -m unittest tests/test_something.py
52

It should return a

python -m unittest tests/test_something.py
020

loader is the instance of

python -m unittest tests/test_something.py
22 doing the loading. standard_tests are the tests that would be loaded by default from the module. It is common for test modules to only want to add or remove tests from the standard set of tests. The third argument is used when loading packages as part of test discovery

A typical

python -m unittest tests/test_something.py
35 function that loads tests from a specific set of
python -m unittest -v test_module
3 classes may look like

python -m unittest tests/test_something.py
3

If discovery is started in a directory containing a package, either from the command line or by calling

python -m unittest -v test_module
85, then the package
python -m unittest -v test_module
99 will be checked for
python -m unittest tests/test_something.py
35. If that function does not exist, discovery will recurse into the package as though it were just another directory. Otherwise, discovery of the package’s tests will be left up to
python -m unittest tests/test_something.py
35 which is called with the following arguments

python -m unittest tests/test_something.py
2

This should return a

python -m unittest tests/test_something.py
020 representing all the tests from the package. (
python -m unittest -v test_module
95 will only contain tests collected from
python -m unittest -v test_module
99. )

Because the pattern is passed into

python -m unittest tests/test_something.py
35 the package is free to continue (and potentially modify) test discovery. A ‘do nothing’
python -m unittest tests/test_something.py
35 function for a test package would look like

python -m unittest tests/test_something.py
5

Changed in version 3. 5. Discovery no longer checks package names for matching pattern due to the impossibility of package names matching the default pattern.

Class and Module Fixtures¶

Class and module level fixtures are implemented in

python -m unittest tests/test_something.py
020. When the test suite encounters a test from a new class then
python -m unittest tests/test_something.py
049 from the previous class (if there is one) is called, followed by
python -m unittest tests/test_something.py
048 from the new class

Similarly if a test is from a different module from the previous test then

python -m unittest tests/test_something.py
102 from the previous module is run, followed by
python -m unittest tests/test_something.py
103 from the new module

After all the tests have run the final

python -m unittest tests/test_something.py
070 and
python -m unittest tests/test_something.py
102 are run

Note that shared fixtures do not play well with [potential] features like test parallelization and they break test isolation. They should be used with care

The default ordering of tests created by the unittest test loaders is to group all tests from the same modules and classes together. This will lead to

python -m unittest tests/test_something.py
068 /
python -m unittest tests/test_something.py
103 (etc) being called exactly once per class and module. 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. A

python -m unittest tests/test_something.py
108 still exists for frameworks that don’t want to support shared fixtures

If there are any exceptions raised during one of the shared fixture functions the test is reported as an error. Because there is no corresponding test instance an

python -m unittest tests/test_something.py
109 object (that has the same interface as a
python -m unittest -v test_module
3) is created to represent the error. If you are just using the standard unittest test runner then this detail doesn’t matter, but if you are a framework author it may be relevant

setUpClass and tearDownClass¶

These must be implemented as class methods

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. The implementations in
python -m unittest -v test_module
3 are empty

If an exception is raised during a

python -m unittest tests/test_something.py
068 then the tests in the class are not run and the
python -m unittest tests/test_something.py
070 is not run. Skipped classes will not have
python -m unittest tests/test_something.py
068 or
python -m unittest tests/test_something.py
070 run. If the exception is a
python -m unittest tests/test_something.py
041 exception then the class will be reported as having been skipped instead of as an error

setUpModule and tearDownModule¶

These should be implemented as functions

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

To add cleanup code that must be run even in the case of an exception, use

python -m unittest tests/test_something.py
122

unittest. addModuleCleanup(function , / , *args , **kwargs)

Add a function to be called after

python -m unittest tests/test_something.py
051 to cleanup resources used during the test class. Functions will be called in reverse order to the order they are added (LIFO). They are called with any arguments and keyword arguments passed into
python -m unittest tests/test_something.py
124 when they are added

If

python -m unittest tests/test_something.py
050 fails, meaning that
python -m unittest tests/test_something.py
051 is not called, then any cleanup functions added will still be called

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

classmethod unittest. enterModuleContext(cm)

Enter the supplied context manager . If successful, also add its

python -m unittest tests/test_something.py
635 method as a cleanup function by
python -m unittest tests/test_something.py
124 and return the result of the
python -m unittest tests/test_something.py
637 method.

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

unittest. 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ệ

It is responsible for calling all the cleanup functions added by

python -m unittest tests/test_something.py
124. If you need cleanup functions to be called prior to
python -m unittest tests/test_something.py
051 then you can call
python -m unittest tests/test_something.py
135 yourself

python -m unittest tests/test_something.py
135 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

Signal Handling¶

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

The

python -m unittest tests/test_something.py
137 command-line option to unittest, along with the
python -m unittest tests/test_something.py
138 parameter to
python -m unittest tests/test_something.py
18, provide more friendly handling of control-C during a test run. With catch break behavior enabled control-C will allow the currently running test to complete, and the test run will then end and report all the results so far. A second control-c will raise a
python -m unittest tests/test_something.py
53 in the usual way

The control-c handling signal handler attempts to remain compatible with code or tests that install their own

python -m unittest tests/test_something.py
141 handler. If the
python -m unittest tests/test_something.py
9 handler is called but isn’t the installed
python -m unittest tests/test_something.py
141 handler, i. e. it has been replaced by the system under test and delegated to, then it calls the default handler. This will normally be the expected behavior by code that replaces an installed handler and delegates to it. For individual tests that need
python -m unittest tests/test_something.py
9 control-c handling disabled the
python -m unittest tests/test_something.py
145 decorator can be used

There are a few utility functions for framework authors to enable control-c handling functionality within test frameworks

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

Install the control-c handler. When a

python -m unittest tests/test_something.py
141 is received (usually in response to the user pressing control-c) all registered results have
python -m unittest tests/test_something.py
95 called

unittest. registerResult(result)

Register a

python -m unittest tests/test_something.py
037 object for control-c handling. Registering a result stores a weak reference to it, so it doesn’t prevent the result from being garbage collected

Registering a

python -m unittest tests/test_something.py
037 object has no side-effects if control-c handling is not enabled, so test frameworks can unconditionally register all results they create independently of whether or not handling is enabled

unittest. removeResult(result)

Remove a registered result. Once a result has been removed then

python -m unittest tests/test_something.py
95 will no longer be called on that result object in response to a control-c

unittest. removeHandler(function=None)

When called without arguments this function removes the control-c handler if it has been installed. 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