Khung thử nghiệm đơn vị
python -m unittest tests/test_something.py9 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.py9 hỗ trợ một số khái niệm quan trọng theo cách hướng đối tượnglị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. This may involve, for example, creating temporary or proxy databases, directories, or starting a server process
test caseA test case is the individual unit of testing. It checks for a specific response to a particular set of inputs.
python -m unittest tests/test_something.py9 provides a base class,
python -m unittest -v test_module3, which may be used to create new test casestest suite
A test suite is a collection of test cases, test suites, or both. It is used to aggregate tests that should be executed together
test runnerA test runner is a component which orchestrates the execution of tests and provides the outcome to the user. The runner may use a graphical interface, a textual interface, or return a special value to indicate the results of executing the tests
See also
Modulepython -m unittest -v test_module4
Another test-support module with a very different flavor
Simple Smalltalk Testing. With PatternsBài báo gốc của Kent Beck về các khung thử nghiệm sử dụng mẫu được chia sẻ bởi
python -m unittest tests/test_something.py9pytest
Third-party unittest framework with a lighter-weight syntax for writing tests. For example,
python -m unittest -v test_module6Phân loại công cụ kiểm tra Python
Một danh sách đầy đủ các công cụ kiểm tra Python bao gồm các khung kiểm tra chức năng và thư viện đối tượng giả
Thử nghiệm trong Danh sách gửi thư PythonMột nhóm có sở thích đặc biệt để thảo luận về thử nghiệm và các công cụ thử nghiệm trong Python
Tập lệnh
python -m unittest -v test_module7 trong bản phân phối nguồn Python là một công cụ GUI để khám phá và thực thi thử nghiệm. Điều này chủ yếu nhằm mục đích dễ sử dụng cho những người mới thử nghiệm đơn vị. Đối với môi trường sản xuất, các thử nghiệm nên được điều khiển bởi một hệ thống tích hợp liên tục như Buildbot, Jenkins, GitHub Actions hoặc AppVeyor
Ví dụ cơ bản¶
Mô-đun
python -m unittest tests/test_something.py9 cung cấp một bộ công cụ phong phú để xây dựng và chạy thử nghiệm. Phần này chứng minh rằng một tập hợp con nhỏ của các công cụ đủ để đáp ứng nhu cầu của hầu hết người dùng
Đây là một đoạn script ngắn để kiểm tra ba phương thức chuỗi
import unittest class TestStringMethods[unittest.TestCase]: def test_upper[self]: self.assertEqual['foo'.upper[], 'FOO'] def test_isupper[self]: self.assertTrue['FOO'.isupper[]] self.assertFalse['Foo'.isupper[]] def test_split[self]: s = 'hello world' self.assertEqual[s.split[], ['hello', 'world']] # check that s.split fails when the separator is not a string with self.assertRaises[TypeError]: s.split[2] if __name__ == '__main__': unittest.main[]
Một testcase được tạo bởi phân lớp
python -m unittest -v test_module9. Ba bài kiểm tra riêng lẻ được xác định bằng các phương thức có tên bắt đầu bằng các chữ cái
python -m unittest tests/test_something.py10. Quy ước đặt tên này thông báo cho người chạy thử nghiệm về phương thức nào đại diện cho các thử nghiệm
Mấu chốt của mỗi bài kiểm tra là một cuộc gọi tới
python -m unittest tests/test_something.py11 để kiểm tra kết quả mong đợi; . Các phương pháp này được sử dụng thay cho câu lệnh
python -m unittest tests/test_something.py15 để người chạy thử nghiệm có thể tích lũy tất cả các kết quả thử nghiệm và tạo báo cáo
Các phương thức
python -m unittest tests/test_something.py16 và
python -m unittest tests/test_something.py17 cho phép bạn xác định các lệnh sẽ được thực thi trước và sau mỗi phương thức kiểm tra. Chúng được đề cập chi tiết hơn trong phần Tổ chức mã kiểm tra .
Khối cuối cùng cho thấy một cách đơn giản để chạy thử nghiệm.
python -m unittest tests/test_something.py18 cung cấp giao diện dòng lệnh cho tập lệnh thử nghiệm. Khi chạy từ dòng lệnh, tập lệnh trên sẽ tạo ra một đầu ra giống như thế này
python -m unittest tests/test_something.py0
Chuyển tùy chọn
python -m unittest tests/test_something.py19 cho tập lệnh thử nghiệm của bạn sẽ hướng dẫn
python -m unittest tests/test_something.py18 kích hoạt mức độ chi tiết cao hơn và tạo ra kết quả sau
python -m unittest tests/test_something.py3
Các ví dụ trên cho thấy các tính năng
python -m unittest tests/test_something.py9 được sử dụng phổ biến nhất, đủ để đáp ứng nhiều nhu cầu kiểm tra hàng ngày. Phần còn lại của tài liệu khám phá bộ tính năng đầy đủ từ các nguyên tắc đầu tiên
Đã thay đổi trong phiên bản 3. 11. The behavior of returning a value from a test method [other than the default
python -m unittest tests/test_something.py52 value], is now deprecated.
Command-Line Interface¶
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.py6
Bạn có thể chuyển vào một danh sách với bất kỳ sự kết hợp nào của tên mô-đun và tên phương thức hoặc lớp đủ điều kiện
Test modules can be specified by file path as well
python -m unittest tests/test_something.py
Điều này cho phép bạn sử dụng hoàn thành tên tệp shell để chỉ định mô-đun thử nghiệm. The file specified must still be importable as a module. Đường dẫn được chuyển đổi thành tên mô-đun bằng cách xóa '. py' và chuyển đổi các dấu phân cách đường dẫn thành '. ’. Nếu bạn muốn thực thi tệp thử nghiệm không thể nhập dưới dạng mô-đun, thay vào đó, bạn nên thực thi tệp trực tiếp
Bạn có thể chạy thử nghiệm với nhiều chi tiết hơn [độ chi tiết cao hơn] bằng cách chuyển vào cờ -v
python -m unittest -v test_module
Khi được thực thi mà không có đối số Thử nghiệm Khám phá được bắt đầu.
python -m unittest tests/test_something.py1
Để biết danh sách tất cả các tùy chọn dòng lệnh
python -m unittest tests/test_something.py5
Đã 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 supports these command-line options
-b, --bộ đệm ¶Đầu ra tiêu chuẩn và các luồng lỗi tiêu chuẩn được lưu vào bộ đệm trong quá trình chạy thử nghiệm. Đầu ra trong một bài kiểm tra vượt qua bị loại bỏ. Đầu ra được lặp lại bình thường khi kiểm tra lỗi hoặc lỗi và được thêm vào thông báo lỗi
-c, --bắt ¶Control-C trong quá trình chạy thử, đợi thử nghiệm hiện tại kết thúc rồi báo cáo tất cả các kết quả cho đến nay. Control-C thứ hai tăng ngoại lệ
python -m unittest tests/test_something.py53 bình thường
Xem Xử lý tín hiệu để biết các chức năng cung cấp chức năng này
-f, --không thành công ¶Stop the test run on the first error or failure
-k ¶Only run test methods and classes that match the pattern or substring. This option may be used multiple times, in which case all test cases that match any of the given patterns are included
Các mẫu có chứa ký tự đại diện [
python -m unittest tests/test_something.py54] đượ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.py55;
Patterns are matched against the fully qualified test method name as imported by the test loader
For example,
python -m unittest tests/test_something.py56 matches
python -m unittest tests/test_something.py57,
python -m unittest tests/test_something.py58, but not
python -m unittest tests/test_something.py59--locals ¶
Show local variables in tracebacks
Mới trong phiên bản 3. 2. The command-line options
python -m unittest -v test_module80,
python -m unittest -v test_module81 and
python -m unittest -v test_module82 were added.
New in version 3. 5. Tùy chọn dòng lệnh
python -m unittest -v test_module83.
Mới trong phiên bản 3. 7. The command-line option
python -m unittest -v test_module84.
The command line can also be used for test discovery, for running all of the tests in a project or just a subset
Khám phá thử nghiệm¶
Mới trong phiên bản 3. 2
Unittest hỗ trợ khám phá thử nghiệm đơn giản. Để tương thích với khám phá thử nghiệm, tất cả các tệp thử nghiệm phải là mô-đun hoặc gói importable from the top-level directory of the project [this means that their filenames must be valid identifiers].
Test discovery is implemented in
python -m unittest -v test_module85, but can also be used from the command line. Việc sử dụng dòng lệnh cơ bản là
python -m unittest -v test_module8
Ghi chú
As a shortcut,
python -m unittest -v test_module86 is the equivalent of
python -m unittest -v test_module87. If you want to pass arguments to test discovery the
python -m unittest -v test_module88 sub-command must be used explicitly
Lệnh phụ
python -m unittest -v test_module88 có các tùy chọn sau-v, --verbose ¶
Verbose output
-s, --start-directory directory ¶Directory to start discovery [
python -m unittest -v test_module90 default]-p, --pattern pattern ¶
Pattern to match test files [
python -m unittest -v test_module91 default]-t, --top-level-directory directory ¶
Top level directory of project [defaults to start directory]
The
python -m unittest -v test_module92,
python -m unittest -v test_module93, and
python -m unittest -v test_module94 options can be passed in as positional arguments in that order. The following two command lines are equivalent
python -m unittest -v test_module9
Cũng như là một đường dẫn, có thể chuyển tên gói, ví dụ
python -m unittest -v test_module95, 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
Caution
Test discovery loads tests by importing them. Khi khám phá thử nghiệm đã tìm thấy tất cả các tệp thử nghiệm từ thư mục bắt đầu mà bạn chỉ định, nó sẽ biến các đường dẫn thành tên gói để nhập. For example
python -m unittest -v test_module96 will be imported as
python -m unittest -v test_module97
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. If this happens test discovery will warn you and exit
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
Test modules and packages can customize test loading and discovery by through the load_tests protocol
Changed in version 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_module98].
Changed in version 3. 11. Python 3. 11 dropped the namespace packages support. It has been broken since 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_module99.
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. For example
python -m unittest tests/test_something.py00
Tổ chức mã kiểm tra¶
The basic building blocks of unit testing are test cases — single scenarios that must be set up and checked for correctness. In
python -m unittest tests/test_something.py9, test cases are represented by
python -m unittest -v test_module9 instances. To make your own test cases you must write subclasses of
python -m unittest -v test_module3 or use
python -m unittest tests/test_something.py003
Mã thử nghiệm của phiên bản
python -m unittest -v test_module3 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
The simplest
python -m unittest -v test_module3 subclass will simply implement a test method [i. e. a method whose name starts with
python -m unittest tests/test_something.py10] in order to perform specific testing code
python -m unittest tests/test_something.py01
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.py007 được cung cấp bởi lớp cơ sở
python -m unittest -v test_module3. 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.py9 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 ta có thể xác định mã thiết lập bằng cách triển khai một phương thức có tên là
python -m unittest tests/test_something.py16, mà khung thử nghiệm sẽ tự động gọi cho mọi thử nghiệm đơn lẻ mà chúng ta chạy
python -m unittest tests/test_something.py02
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.py16 đư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.py17 để dọn dẹp sau khi chạy phương thức thử nghiệm
python -m unittest tests/test_something.py03
Nếu
python -m unittest tests/test_something.py16 thành công,
python -m unittest tests/test_something.py17 sẽ được chạy cho dù phương pháp thử nghiệm có thành công hay không
Môi trường làm việc cho mã kiểm tra như vậy được gọi là vật cố kiểm tra. Một phiên bản TestCase mới được tạo dưới dạng một lịch thi thử duy nhất được sử dụng để thực thi từng phương thức thử nghiệm riêng lẻ. Do đó,
python -m unittest tests/test_something.py16,
python -m unittest tests/test_something.py17 và
python -m unittest tests/test_something.py017 sẽ được gọi một lần cho mỗi bài kiểm tra
Bạn nên sử dụng triển khai TestCase để nhóm các bài kiểm tra lại với nhau theo các tính năng mà chúng kiểm tra.
python -m unittest tests/test_something.py9 cung cấp một cơ chế cho việc này. bộ thử nghiệm, được đại diện bởi lớp ________ 2020 của ________ 09. Trong hầu hết các trường hợp, gọi điện cho
python -m unittest tests/test_something.py18 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.py04
Bạn có thể đặt các định nghĩa về trường hợp thử nghiệm và bộ thử nghiệm trong cùng mô-đun với mã mà chúng sẽ kiểm tra [chẳng hạn như
python -m unittest tests/test_something.py022], 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.py023
Mô-đun thử nghiệm có thể chạy độc lập từ dòng lệnh
Có thể dễ dàng tách mã kiểm tra khỏi mã vận chuyển hơn
Ít bị cám dỗ thay đổi mã kiểm tra để phù hợp với mã mà nó kiểm tra mà không có lý do chính đáng
Mã kiểm tra nên được sửa đổi ít thường xuyên hơn nhiều so với mã mà nó kiểm tra
Mã được kiểm tra có thể được cấu trúc lại dễ dàng hơn
Các bài kiểm tra cho các mô-đun được viết bằng C dù sao cũng phải ở các mô-đun riêng biệt, vậy tại sao không nhất quán?
Nếu chiến lược thử nghiệm thay đổi, không cần thay đổi mã nguồn
Sử dụng lại mã kiểm tra cũ¶
Một số người dùng sẽ thấy rằng họ có sẵn mã kiểm tra mà họ muốn chạy từ
python -m unittest tests/test_something.py9 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_module3
Vì lý do này,
python -m unittest tests/test_something.py9 cung cấp một lớp
python -m unittest tests/test_something.py003. Lớp con này của
python -m unittest -v test_module3 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.py05
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.py06
Ghi chú
Mặc dù có thể sử dụng
python -m unittest tests/test_something.py003 để 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.py9, 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_module3 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_module4. Nếu vậy,
python -m unittest -v test_module4 cung cấp một lớp
python -m unittest tests/test_something.py034 có thể tự động xây dựng các phiên bản
python -m unittest tests/test_something.py035 từ các thử nghiệm dựa trên
python -m unittest -v test_module4 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.py037
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.py038 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.py039 trong một phương pháp kiểm tra hoặc
python -m unittest tests/test_something.py16 .
Bỏ qua cơ bản trông như thế này
python -m unittest tests/test_something.py07
Đâ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.py08
Các lớp có thể được bỏ qua giống như các phương thức
python -m unittest tests/test_something.py09
python -m unittest tests/test_something.py042 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.py043
python -m unittest tests/test_something.py30
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.py038 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.py31
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.py039 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.py16 hoặc
python -m unittest tests/test_something.py17 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.py048 hoặc
python -m unittest tests/test_something.py049. Các mô-đun bị bỏ qua sẽ không chạy được
python -m unittest tests/test_something.py050 hoặc
python -m unittest tests/test_something.py051
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.py052
Ví dụ, bài kiểm tra sau
python -m unittest tests/test_something.py32
sẽ tạo ra đầu ra sau
python -m unittest tests/test_something.py33
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.py053 sẽ không được hiển thị
python -m unittest tests/test_something.py34
Lớp và hàm¶
Phần này mô tả sâu về API của
python -m unittest tests/test_something.py9
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_module3 đại diện cho các đơn vị kiểm tra logic trong vũ trụ
python -m unittest tests/test_something.py9. 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_module3 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_module3, 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.py059
Đã 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_module3 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_module3 cung cấp ba nhóm phương thức. một nhóm được sử dụng để chạy thử nghiệm, một nhóm khác được triển khai thử nghiệm sử dụng để kiểm tra các điều kiện và báo cáo lỗi và một số phương pháp điều tra cho phép thu thập thông tin về bản thân thử nghiệm
Các phương thức trong nhóm đầu tiên [đang chạy thử nghiệm] là
thiết lập[] ¶Phương pháp được gọi để chuẩn bị vật cố định thử nghiệm. Điều này được gọi ngay trước khi gọi phương thức thử nghiệm; . Việc thực hiện mặc định không có gì
xé xuống[] ¶Phương thức được gọi ngay sau khi phương thức kiểm tra được gọi và kết quả được ghi lại. Điều này được gọi ngay cả khi phương thức kiểm tra đưa ra một ngoại lệ, vì vậy việc triển khai trong các lớp con có thể cần phải đặc biệt cẩn thận về việc kiểm tra trạng thái bên trong. Bất kỳ ngoại lệ nào, ngoại trừ
python -m unittest tests/test_something.py063 hoặc
python -m unittest tests/test_something.py041, đượ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.py16 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.py068 đượ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.py069
python -m unittest tests/test_something.py35
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.py070 đượ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.py069
python -m unittest tests/test_something.py36
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.py037 đượ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.py52, 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.py074] 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.py075
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_module3
Đã 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.py077 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.py16 bỏ qua thử nghiệm hiện tại. Xem Bỏ qua kiểm tra và lỗi dự kiến để biết thêm thông tin.
Mới trong phiên bản 3. 1
subTest[tin nhắn=Không có, **params]¶Trả về trình quản lý bối cảnh thực thi khối mã kèm theo dưới dạng phép thử phụ. msg và params là các giá trị tùy ý, tùy chọn được hiển thị bất cứ khi nào một phép thử phụ không thành công, cho phép bạn xác định chúng một cách rõ ràng
Một trường hợp kiểm tra có thể chứa bất kỳ số lượng khai báo kiểm tra con nào và chúng có thể được lồng vào nhau tùy ý
Xem Phân biệt các phép thử lặp lại bằng phép thử con để biết thêm thông tin.
Mới trong phiên bản 3. 4
gỡ lỗi[] ¶Chạy thử nghiệm mà không thu thập kết quả. Điều này cho phép các ngoại lệ do thử nghiệm đưa ra được truyền tới người gọi và có thể được sử dụng để hỗ trợ chạy thử nghiệm trong trình gỡ lỗi
Lớp
python -m unittest -v test_module3 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.py080
python -m unittest tests/test_something.py081
python -m unittest tests/test_something.py082
python -m unittest tests/test_something.py083
python -m unittest tests/test_something.py084
python -m unittest tests/test_something.py085
python -m unittest tests/test_something.py086
python -m unittest tests/test_something.py087
python -m unittest tests/test_something.py088
python -m unittest tests/test_something.py089
3. 1
python -m unittest tests/test_something.py090
python -m unittest tests/test_something.py091
3. 1
python -m unittest tests/test_something.py092
python -m unittest tests/test_something.py093
3. 1
python -m unittest tests/test_something.py094
python -m unittest tests/test_something.py095
3. 1
python -m unittest tests/test_something.py096
python -m unittest tests/test_something.py097
3. 1
python -m unittest tests/test_something.py098
python -m unittest tests/test_something.py099
3. 1
python -m unittest tests/test_something.py300
python -m unittest tests/test_something.py301
3. 2
python -m unittest tests/test_something.py302
python -m unittest tests/test_something.py303
3. 2
Tất cả các phương thức xác nhận đều chấp nhận một đối số msg, nếu được chỉ định, được sử dụng làm thông báo lỗi khi thất bại [xem thêm
python -m unittest tests/test_something.py304]. Lưu ý rằng đối số từ khóa msg chỉ có thể được chuyển đến
python -m unittest tests/test_something.py14,
python -m unittest tests/test_something.py306,
python -m unittest tests/test_something.py307,
python -m unittest tests/test_something.py308 khi chúng được sử dụng làm trình quản lý ngữ cảnhassertEqual[đầu tiên , thứ hai, msg=None]¶
Kiểm tra xem thứ nhất và thứ hai có bằng nhau không. Nếu các giá trị không so sánh bằng nhau, thử nghiệm sẽ thất bại
Ngoài ra, nếu thứ nhất và thứ hai là cùng một loại chính xác và là một trong danh sách, tuple, dict, set, freezeset hoặc str hoặc bất kỳ loại nào mà lớp con đăng ký với python -m unittest tests/test_something.py
309 thì hàm đẳng thức dành riêng cho loại sẽ được gọi trong . list of type-specific methods].
Đã thay đổi trong phiên bản 3. 1. Đã thêm tính năng tự động gọi hàm đẳng thức theo loại cụ thể.
Đã thay đổi trong phiên bản 3. 2. ______2310 được thêm làm hàm đẳng thức kiểu mặc định để so sánh các chuỗi.
assertNotEqual[đầu tiên , thứ hai, msg=None]¶Kiểm tra thứ nhất và thứ hai không bằng nhau. Nếu các giá trị so sánh bằng nhau, thử nghiệm sẽ thất bại
assertTrue[expr , tin nhắn=None]¶assertFalse[expr, msg=None]¶Kiểm tra xem expr có đúng [hoặc sai]
Lưu ý rằng điều này tương đương với
python -m unittest tests/test_something.py311 chứ không phải với
python -m unittest tests/test_something.py312 [sử dụng
python -m unittest tests/test_something.py313 cho trường hợp sau]. Phương pháp này cũng nên tránh khi có sẵn các phương pháp cụ thể hơn [e. g.
python -m unittest tests/test_something.py080 thay vì
python -m unittest tests/test_something.py315], 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ôngassertIs[đầu tiên , thứ hai, 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.py52
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.py317]. Để kiểm tra loại chính xác, hãy sử dụng
python -m unittest tests/test_something.py318
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.py319
python -m unittest tests/test_something.py320 tăng ex
python -m unittest tests/test_something.py321
python -m unittest tests/test_something.py320 tăng exc và thông báo khớp với regex r
3. 1
python -m unittest tests/test_something.py323
python -m unittest tests/test_something.py320 tăng cảnh báo
3. 2
python -m unittest tests/test_something.py325
python -m unittest tests/test_something.py320 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.py327
Khối
python -m unittest tests/test_something.py328 ghi nhật ký trên logger với mức tối thiểu
3. 4
python -m unittest tests/test_something.py329Khối
python -m unittest tests/test_something.py328 không đăng nhập
logger với mức tối thiểu
3. 10
assertRaises[ngoại lệ , có thể gọi, *args, **kwds]¶assertRaises[exception, *, msg=None]Kiểm tra xem có ngoại lệ nào xảy ra khi có thể gọi được với bất kỳ đối số vị trí hoặc từ khóa nào cũng được chuyển đến
python -m unittest tests/test_something.py14. 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ệ
If only the exception and possibly the msg arguments are given, return a context manager so that the code under test can be written inline rather than as a function
python -m unittest tests/test_something.py37
Khi được sử dụng làm trình quản lý ngữ cảnh,
python -m unittest tests/test_something.py14 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.py333 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.py38
Đã thay đổi trong phiên bản 3. 1. Đã thêm khả năng sử dụng
python -m unittest tests/test_something.py14 làm trình quản lý ngữ cảnh.
Đã thay đổi trong phiên bản 3. 2. Đã thêm thuộc tính
python -m unittest tests/test_something.py333.
Đã 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.py14 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.py337. ví dụ
python -m unittest tests/test_something.py39
hoặc
python -m unittest tests/test_something.py60
Mới trong phiên bản 3. 1. Đã thêm dưới tên
python -m unittest tests/test_something.py338.
Đã thay đổi trong phiên bản 3. 2. Đổi tên thành
python -m unittest tests/test_something.py306.
Đã 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.py307. 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à các đối số msg, 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 một hàm
python -m unittest tests/test_something.py61
When used as a context manager,
python -m unittest tests/test_something.py307 accepts the additional keyword argument msg
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.py342 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.py343 và
python -m unittest tests/test_something.py344. Đ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.py62
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.py307 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.py337. Thí dụ
python -m unittest tests/test_something.py63
hoặc
python -m unittest tests/test_something.py64
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.py347 hoặc một
python -m unittest tests/test_something.py348 đư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.py349 hoặc
python -m unittest tests/test_something.py350]. Mặc định là
python -m unittest tests/test_something.py351
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.py328 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.py353 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.py348 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.py65
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.py347 hoặc một
python -m unittest tests/test_something.py348 đư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.py349 hoặc
python -m unittest tests/test_something.py350]. Mặc định là
python -m unittest tests/test_something.py351
Unlike
python -m unittest tests/test_something.py360, nothing will be returned by the context manager
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.py361
python -m unittest tests/test_something.py362
python -m unittest tests/test_something.py363
python -m unittest tests/test_something.py364
python -m unittest tests/test_something.py365
python -m unittest tests/test_something.py366
3. 1
python -m unittest tests/test_something.py367
python -m unittest tests/test_something.py368
3. 1
python -m unittest tests/test_something.py369
python -m unittest tests/test_something.py370
3. 1
python -m unittest tests/test_something.py371
python -m unittest tests/test_something.py372
3. 1
python -m unittest tests/test_something.py373
python -m unittest tests/test_something.py374
3. 1
python -m unittest tests/test_something.py375
python -m unittest tests/test_something.py376
3. 2
python -m unittest tests/test_something.py377
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.py378] 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.py379
Đã 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.py381 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]¶
Test that first is respectively >, >=, < or