Python phía máy khách

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
33 là một thư viện để thử nghiệm bằng Python. Nó cho phép bạn thay thế các phần của hệ thống đang thử nghiệm bằng các đối tượng giả và đưa ra xác nhận về cách chúng đã được sử dụng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
33 cung cấp một lớp
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 cốt lõi loại bỏ nhu cầu tạo một loạt các sơ khai trong bộ thử nghiệm của bạn. Sau khi thực hiện một hành động, bạn có thể đưa ra các xác nhận về phương thức/thuộc tính nào đã được sử dụng và đối số mà chúng được gọi với. Bạn cũng có thể chỉ định các giá trị trả về và đặt các thuộc tính cần thiết theo cách thông thường

Ngoài ra, mô hình cung cấp trình trang trí

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 xử lý các thuộc tính cấp mô-đun và lớp trong phạm vi thử nghiệm, cùng với
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
38 để tạo các đối tượng duy nhất. Xem hướng dẫn nhanh để biết một số ví dụ về cách sử dụng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37

Mock được thiết kế để sử dụng với

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
42 và dựa trên mẫu 'hành động -> xác nhận' thay vì 'ghi -> phát lại' được nhiều khung mô phỏng sử dụng

Có một cổng sau của

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
33 cho các phiên bản Python cũ hơn, có sẵn dưới dạng giả trên PyPI

Hướng dẫn nhanh¶

Các đối tượng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 tạo tất cả các thuộc tính và phương thức khi bạn truy cập chúng và lưu trữ chi tiết về cách chúng được sử dụng. Bạn có thể định cấu hình chúng, để chỉ định giá trị trả về hoặc giới hạn những thuộc tính khả dụng, sau đó đưa ra xác nhận về cách chúng đã được sử dụng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
2

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 cho phép bạn thực hiện các tác dụng phụ, bao gồm đưa ra một ngoại lệ khi mô phỏng được gọi

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
5

Mock có nhiều cách khác để bạn có thể định cấu hình và kiểm soát hành vi của nó. Ví dụ, đối số spec cấu hình mô phỏng để lấy thông số kỹ thuật của nó từ một đối tượng khác. Cố gắng truy cập các thuộc tính hoặc phương thức trên mô phỏng không tồn tại trên thông số kỹ thuật sẽ không thành công với một

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
47

Trình quản lý bối cảnh/trang trí

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 giúp dễ dàng giả định các lớp hoặc đối tượng trong một mô-đun đang được thử nghiệm. Đối tượng bạn chỉ định sẽ được thay thế bằng một mô hình (hoặc đối tượng khác) trong quá trình kiểm tra và được khôi phục khi quá trình kiểm tra kết thúc

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
8

Ghi chú

Khi bạn lồng các trình trang trí bản vá, các giả được chuyển vào hàm được trang trí theo cùng thứ tự mà chúng đã áp dụng (thứ tự Python bình thường mà các trình trang trí được áp dụng). Điều này có nghĩa là từ dưới lên, do đó, trong ví dụ trên, giả cho

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
49 được chuyển vào đầu tiên

Với

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37, điều quan trọng là bạn vá các đối tượng trong không gian tên nơi chúng được tra cứu. Điều này thường đơn giản, nhưng để có hướng dẫn nhanh, hãy đọc nơi vá .

Cũng như một người trang trí

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 có thể được sử dụng như một người quản lý ngữ cảnh trong câu lệnh with

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
2

Ngoài ra còn có

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
52 để đặt các giá trị trong từ điển chỉ trong một phạm vi và khôi phục từ điển về trạng thái ban đầu khi thử nghiệm kết thúc

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
4

Mock hỗ trợ mô phỏng Python các phương pháp ma thuật . Cách dễ nhất để sử dụng các phương thức ma thuật là với lớp

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40. Nó cho phép bạn làm những việc như.

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
6

Mock cho phép bạn gán các chức năng (hoặc các phiên bản Mock khác) cho các phương thức ma thuật và chúng sẽ được gọi một cách thích hợp. Lớp

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 chỉ là một biến thể Mô phỏng có tất cả các phương thức ma thuật được tạo sẵn cho bạn (dù sao thì tất cả đều là những phương thức hữu ích)

Sau đây là một ví dụ về việc sử dụng các phương thức ma thuật với lớp Mock thông thường

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
8

Để đảm bảo rằng các đối tượng giả trong thử nghiệm của bạn có cùng api với các đối tượng mà chúng đang thay thế, bạn có thể sử dụng tự động xác định . Tự động chỉ định có thể được thực hiện thông qua đối số autospec để vá hoặc hàm

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
55. Tự động xác định tạo các đối tượng giả có cùng thuộc tính và phương thức như đối tượng mà chúng đang thay thế, đồng thời bất kỳ hàm và phương thức nào (bao gồm cả hàm tạo) đều có cùng chữ ký gọi như đối tượng thực.

Điều này đảm bảo rằng các bản mô phỏng của bạn sẽ bị lỗi giống như mã sản xuất của bạn nếu chúng được sử dụng không đúng cách

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
0

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
55 cũng có thể được sử dụng trên các lớp, nơi nó sao chép chữ ký của phương thức
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
57 và trên các đối tượng có thể gọi được, nơi nó sao chép chữ ký của phương thức
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
58

Lớp Giả Lập¶

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 là một đối tượng mô phỏng linh hoạt nhằm thay thế việc sử dụng sơ khai và kiểm tra nhân đôi trong toàn bộ mã của bạn. Mô hình có thể gọi được và tạo thuộc tính dưới dạng mô hình mới khi bạn truy cập chúng 1. Truy cập cùng một thuộc tính sẽ luôn trả về cùng một mô hình. Mô hình ghi lại cách bạn sử dụng chúng, cho phép bạn xác nhận những gì mã của bạn đã làm với chúng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 là một lớp con của
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 với tất cả các phương thức ma thuật được tạo sẵn và sẵn sàng để sử dụng. Ngoài ra còn có các biến thể không thể gọi được, hữu ích khi bạn mô phỏng các đối tượng không thể gọi được.
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
62 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
63

Các bộ trang trí

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 giúp dễ dàng thay thế tạm thời các lớp trong một mô-đun cụ thể bằng một đối tượng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36. Theo mặc định,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 sẽ tạo một
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 cho bạn. Bạn có thể chỉ định một lớp thay thế của
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 bằng cách sử dụng đối số new_callable cho
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37

lớp đơn vị kiểm tra. chế nhạo. Mô phỏng(thông số kỹ thuật=Không có, side_effect=None, return_value=DEFAULT, wraps=None, name=None, spec_set=None, unsafe=False, **kwargs)

Tạo một đối tượng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 mới.
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 nhận một số đối số tùy chọn xác định hành vi của đối tượng Mock

  • thông số kỹ thuật. Đây có thể là một danh sách các chuỗi hoặc một đối tượng hiện có (một lớp hoặc thể hiện) đóng vai trò là đặc tả cho đối tượng giả. Nếu bạn truyền vào một đối tượng thì một danh sách các chuỗi được hình thành bằng cách gọi dir trên đối tượng (không bao gồm các thuộc tính và phương thức ma thuật không được hỗ trợ). Truy cập bất kỳ thuộc tính nào không có trong danh sách này sẽ tăng

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    47

    Nếu spec là một đối tượng (chứ không phải là một danh sách các chuỗi) thì

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    73 trả về lớp của đối tượng spec. Điều này cho phép các mô phỏng vượt qua các bài kiểm tra
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    74

  • spec_set. Một biến thể chặt chẽ hơn của thông số kỹ thuật. Nếu được sử dụng, việc cố gắng đặt hoặc nhận một thuộc tính trên mô phỏng không có trên đối tượng được truyền dưới dạng spec_set sẽ làm tăng

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    47

  • tác dụng phụ. Một chức năng được gọi bất cứ khi nào Mock được gọi. Xem thuộc tính

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    46. Hữu ích để tăng ngoại lệ hoặc thay đổi động các giá trị trả về. Hàm được gọi với cùng các đối số như mô phỏng và trừ khi nó trả về
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    77, giá trị trả về của hàm này được sử dụng làm giá trị trả về

    Ngoài ra, side_effect có thể là một lớp hoặc trường hợp ngoại lệ. Trong trường hợp này, ngoại lệ sẽ được đưa ra khi mô hình được gọi

    Nếu side_effect là một iterable thì mỗi lệnh gọi đến mô phỏng sẽ trả về giá trị tiếp theo từ iterable

    Một side_effect có thể bị xóa bằng cách đặt nó thành

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    78

  • return_value. Giá trị được trả về khi mô phỏng được gọi. Theo mặc định, đây là Mô hình mới (được tạo trong lần truy cập đầu tiên). Xem thuộc tính

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    79

  • không an toàn. Theo mặc định, việc truy cập bất kỳ thuộc tính nào có tên bắt đầu bằng khẳng định, khẳng định, khẳng định, khẳng định hoặc khẳng định sẽ tăng

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    47. Vượt qua
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    81 sẽ cho phép truy cập vào các thuộc tính này

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

  • kết thúc tốt đẹp. Mục để bọc đối tượng giả. Nếu kết thúc tốt đẹp không phải là

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    78 thì việc gọi Mock sẽ chuyển cuộc gọi đến đối tượng được bao bọc (trả về kết quả thực). Quyền truy cập thuộc tính trên mô phỏng sẽ trả về một đối tượng Mô phỏng bao bọc thuộc tính tương ứng của đối tượng được bao bọc (do đó, việc cố gắng truy cập một thuộc tính không tồn tại sẽ làm tăng
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    47)

    Nếu mô phỏng có một bộ return_value rõ ràng thì các cuộc gọi sẽ không được chuyển đến đối tượng được bao bọc và thay vào đó, return_value được trả về

  • Tên. Nếu mô phỏng có tên thì nó sẽ được sử dụng trong phần lặp lại của mô phỏng. Điều này có thể hữu ích để gỡ lỗi. Tên được truyền bá cho trẻ em giả

Mocks cũng có thể được gọi với các đối số từ khóa tùy ý. Chúng sẽ được sử dụng để đặt thuộc tính trên mô hình sau khi nó được tạo. Xem phương pháp

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
84 để biết chi tiết

assert_gọi()

Khẳng định rằng mô hình đã được gọi ít nhất một lần

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
0

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

assert_called_once()

Khẳng định rằng giả được gọi chính xác một lần

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
0

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

assert_called_with(*args , **kwargs)

Phương pháp này là một cách thuận tiện để khẳng định rằng cuộc gọi cuối cùng đã được thực hiện theo một cách cụ thể

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
1

assert_called_once_with(*args , **kwargs)

Khẳng định rằng mô hình được gọi chính xác một lần và cuộc gọi đó được thực hiện với các đối số đã chỉ định

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
2

assert_any_call(*args , **kwargs)

xác nhận giả đã được gọi với các đối số được chỉ định

Khẳng định vượt qua nếu giả đã từng được gọi, không giống như

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
85 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
86 chỉ vượt qua nếu cuộc gọi là cuộc gọi gần đây nhất và trong trường hợp của
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
86, đó cũng phải là cuộc gọi duy nhất

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
3

assert_has_calls(calls , any_order=False)

xác nhận giả đã được gọi với các cuộc gọi được chỉ định. Danh sách

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
88 được kiểm tra các cuộc gọi

Nếu any_order là sai thì các cuộc gọi phải tuần tự. Có thể có các cuộc gọi bổ sung trước hoặc sau các cuộc gọi được chỉ định

Nếu any_order là đúng thì các cuộc gọi có thể theo bất kỳ thứ tự nào, nhưng tất cả chúng phải xuất hiện trong

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
88

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
4

assert_not_call()

Khẳng định giả không bao giờ được gọi

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
5

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

reset_mock(* , return_value=False, side_effect=False)

Phương thức reset_mock đặt lại tất cả các thuộc tính cuộc gọi trên một đối tượng giả

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
6

Đã thay đổi trong phiên bản 3. 6. Đã thêm đối số chỉ hai từ khóa vào hàm reset_mock.

Điều này có thể hữu ích khi bạn muốn thực hiện một loạt xác nhận sử dụng lại cùng một đối tượng. Lưu ý rằng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
90 không xóa giá trị trả về,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 hoặc bất kỳ thuộc tính con nào bạn đã đặt bằng phép gán thông thường theo mặc định. Trường hợp bạn muốn đặt lại return_value hoặc
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 thì truyền tham số tương ứng là
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
93. Mô hình con và mô hình giá trị trả về (nếu có) cũng được đặt lại

Ghi chú

return_value và

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 chỉ là đối số từ khóa

mock_add_spec(spec , spec_set=False)

Thêm thông số kỹ thuật vào mô phỏng. spec có thể là một đối tượng hoặc một danh sách các chuỗi. Chỉ các thuộc tính trên thông số kỹ thuật mới có thể được tìm nạp dưới dạng thuộc tính từ mô phỏng

Nếu spec_set là true thì chỉ có thể đặt các thuộc tính trên spec

attach_mock(mock , thuộc tính)

Đính kèm một mô hình làm thuộc tính của cái này, thay thế tên và cha mẹ của nó. Các cuộc gọi đến mô hình đính kèm sẽ được ghi lại trong các thuộc tính

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
95 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
88 của thuộc tính này

configure_mock(**kwargs)

Đặt các thuộc tính trên giả thông qua các đối số từ khóa

Các thuộc tính cộng với giá trị trả về và tác dụng phụ có thể được đặt trên các mô hình con bằng cách sử dụng ký hiệu dấu chấm tiêu chuẩn và giải nén từ điển trong lệnh gọi phương thức

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
7

Điều tương tự có thể đạt được trong lệnh gọi hàm tạo tới chế độ giả

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
8

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
84 tồn tại để giúp cấu hình dễ dàng hơn sau khi mô phỏng đã được tạo

__dir__()

đối tượng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 giới hạn kết quả của
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
99 thành kết quả hữu ích. Đối với các mô hình có thông số kỹ thuật, điều này bao gồm tất cả các thuộc tính được phép cho mô hình

Xem

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
500 để biết chức năng của bộ lọc này và cách tắt nó

_get_child_mock(**kw)

Tạo mô hình con cho các thuộc tính và giá trị trả về. Theo mặc định, các mô phỏng con sẽ cùng loại với cha mẹ. Các lớp con của Mock có thể muốn ghi đè lên điều này để tùy chỉnh cách tạo các mô phỏng con

Đối với các mô phỏng không thể gọi được, biến thể có thể gọi được sẽ được sử dụng (chứ không phải bất kỳ lớp con tùy chỉnh nào)

đã gọi

Một giá trị boolean đại diện cho việc đối tượng giả có được gọi hay không

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
9

call_count

Một số nguyên cho bạn biết đối tượng giả đã được gọi bao nhiêu lần

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
50

return_value

Đặt giá trị này để định cấu hình giá trị được trả về bằng cách gọi mô hình

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
51

Giá trị trả về mặc định là một đối tượng giả và bạn có thể định cấu hình nó theo cách thông thường

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
52

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
79 cũng có thể được đặt trong hàm tạo

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
53

side_effect

Đây có thể là một chức năng được gọi khi mô phỏng được gọi, một lần lặp hoặc một ngoại lệ (lớp hoặc thể hiện) được nêu ra

Nếu bạn truyền vào một hàm, nó sẽ được gọi với cùng các đối số như đối số giả và trừ khi hàm trả về đơn lẻ

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
77, lệnh gọi tới đối tượng giả sau đó sẽ trả về bất kỳ giá trị nào mà hàm trả về. Nếu hàm trả về
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
77 thì mô phỏng sẽ trả về giá trị bình thường của nó (từ
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
79)

Nếu bạn chuyển vào một iterable, nó được sử dụng để truy xuất một iterator phải mang lại một giá trị cho mỗi cuộc gọi. Giá trị này có thể là một trường hợp ngoại lệ được đưa ra hoặc một giá trị được trả về từ lệnh gọi đến mô phỏng (xử lý ____077 giống hệt với trường hợp chức năng)

Một ví dụ về một mô phỏng đưa ra một ngoại lệ (để kiểm tra việc xử lý ngoại lệ của một API)

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
54

Sử dụng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 để trả về một chuỗi giá trị

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
55

Sử dụng một cuộc gọi được

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
56

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 có thể được đặt trong hàm tạo. Đây là một ví dụ thêm một vào giá trị mà mô hình được gọi và trả về giá trị đó

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
57

Đặt

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 thành
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
78 sẽ xóa nó

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
58

call_args

Đây là

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
78 (nếu mô phỏng chưa được gọi) hoặc các đối số mà mô hình được gọi lần cuối với. Điều này sẽ ở dạng một tuple. thành viên đầu tiên, cũng có thể được truy cập thông qua thuộc tính
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
511, là bất kỳ đối số có thứ tự nào mà mô hình được gọi bằng (hoặc một bộ trống) và thành viên thứ hai, cũng có thể được truy cập thông qua thuộc tính
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
512, là bất kỳ đối số từ khóa nào (hoặc

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
59

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
513, cùng với các thành viên của danh sách
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
514,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
95 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
88 là các đối tượng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
517. Đây là các bộ dữ liệu, vì vậy chúng có thể được giải nén để lấy các đối số riêng lẻ và đưa ra các xác nhận phức tạp hơn. Xem các cuộc gọi dưới dạng bộ dữ liệu .

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

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
511 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
512.

call_args_list

Đây là danh sách tất cả các cuộc gọi được thực hiện cho đối tượng giả theo thứ tự (vì vậy độ dài của danh sách là số lần nó được gọi). Trước khi bất kỳ cuộc gọi nào được thực hiện, nó là một danh sách trống. Đối tượng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
517 có thể được sử dụng để thuận tiện xây dựng danh sách các cuộc gọi để so sánh với
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
514

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
80

Thành viên của

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
514 là đối tượng của
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
517. Chúng có thể được giải nén dưới dạng các bộ dữ liệu để lấy các đối số riêng lẻ. Xem các cuộc gọi dưới dạng bộ dữ liệu .

method_calls

Cũng như theo dõi các lệnh gọi đến chính chúng, các mô phỏng cũng theo dõi các lệnh gọi đến các phương thức và thuộc tính cũng như các phương thức và thuộc tính của chúng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
81

Thành viên của

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
95 là đối tượng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
517. Chúng có thể được giải nén dưới dạng các bộ dữ liệu để lấy các đối số riêng lẻ. Xem các cuộc gọi dưới dạng bộ dữ liệu .

mock_calls

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
88 ghi lại tất cả các cuộc gọi đến đối tượng giả, các phương thức của nó, các phương thức ma thuật và giá trị trả về giả

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
82

Thành viên của

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
88 là đối tượng của
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
517. Chúng có thể được giải nén dưới dạng các bộ dữ liệu để lấy các đối số riêng lẻ. Xem các cuộc gọi dưới dạng bộ dữ liệu .

Ghi chú

Cách

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
88 được ghi lại có nghĩa là khi các cuộc gọi lồng nhau được thực hiện, các tham số của các cuộc gọi tổ tiên không được ghi lại và do đó sẽ luôn so sánh bằng nhau

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
83

__class__

Thông thường thuộc tính

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
73 của một đối tượng sẽ trả về kiểu của nó. Đối với một đối tượng giả có
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
531, thay vào đó,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
73 trả về lớp đặc tả. Điều này cho phép các đối tượng giả vượt qua các bài kiểm tra
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
74 đối với đối tượng mà chúng đang thay thế/giả dạng là

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
84

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
73 có thể gán cho, điều này cho phép mô phỏng vượt qua kiểm tra
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
74 mà không buộc bạn phải sử dụng thông số kỹ thuật

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
85

lớp đơn vị kiểm tra. chế nhạo. NonCallableMock(spec=Không, wraps=None, name=None, spec_set=None, **kwargs)

Phiên bản không thể gọi được của

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36. Các tham số hàm tạo có cùng ý nghĩa của
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36, ngoại trừ return_value và side_effect không có ý nghĩa đối với mô hình không thể gọi được

Các đối tượng giả sử dụng một lớp hoặc một thể hiện dưới dạng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
531 hoặc
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
539 có thể vượt qua các bài kiểm tra
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
74

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
86

Các lớp

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 có hỗ trợ chế nhạo các phương pháp ma thuật. Xem phương pháp ma thuật để biết đầy đủ chi tiết.

Các lớp giả và các trình trang trí

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 đều lấy các đối số từ khóa tùy ý cho cấu hình. Đối với các trình trang trí
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37, các từ khóa được chuyển đến hàm tạo của mô hình giả đang được tạo. Các đối số từ khóa là để định cấu hình các thuộc tính của mô hình

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
87

Giá trị trả về và tác dụng phụ của các mô hình con có thể được đặt theo cùng một cách, sử dụng ký hiệu chấm. Vì bạn không thể sử dụng tên chấm trực tiếp trong cuộc gọi, bạn phải tạo một từ điển và giải nén nó bằng cách sử dụng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
544

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
8

Một mô hình có thể gọi được đã được tạo bằng một thông số kỹ thuật (hoặc một spec_set) sẽ xem xét nội quan chữ ký của đối tượng đặc tả khi khớp lệnh gọi với mô hình. Do đó, nó có thể khớp với các đối số của cuộc gọi thực tế bất kể chúng được truyền theo vị trí hay theo tên

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
89

Điều này áp dụng cho

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
85,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
86,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
547 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
548. Khi Tự động xác định , nó cũng sẽ áp dụng cho các lệnh gọi phương thức trên đối tượng giả.

Đã thay đổi trong phiên bản 3. 4. Đã thêm nội dung chữ ký trên các đối tượng giả được chỉ định và tự động chỉ định.

lớp đơn vị kiểm tra. chế nhạo. PropertyMock(*args , **kwargs)

Một mô hình nhằm mục đích được sử dụng làm thuộc tính hoặc bộ mô tả khác trên một lớp.

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
549 cung cấp các phương thức
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
550 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
551 để bạn có thể chỉ định giá trị trả về khi nó được tìm nạp

Tìm nạp một phiên bản

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
549 từ một đối tượng gọi mô hình giả, không có đối số. Đặt nó gọi mô hình với giá trị được đặt

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
20

Do cách lưu trữ các thuộc tính giả, bạn không thể trực tiếp đính kèm một

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
549 vào một đối tượng giả. Thay vào đó, bạn có thể đính kèm nó vào đối tượng kiểu giả

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
21

lớp đơn vị kiểm tra. chế nhạo. AsyncMock(spec=Không có, side_effect=None, return_value=DEFAULT, wraps=None, name=None, spec_set=None, unsafe=False, **kwargs)

Phiên bản không đồng bộ của

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40. Đối tượng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
555 sẽ hoạt động để đối tượng được nhận dạng là một hàm không đồng bộ và kết quả của lệnh gọi là một hàm có thể chờ được

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
22

Kết quả của

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
556 là một hàm async sẽ có kết quả là
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 hoặc
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
79 sau khi được chờ đợi

  • nếu

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    46 là một hàm thì hàm async sẽ trả về kết quả của hàm đó,

  • nếu

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    46 là một ngoại lệ, chức năng async sẽ đưa ra ngoại lệ,

  • nếu

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    46 là một iterable, hàm async sẽ trả về giá trị tiếp theo của iterable, tuy nhiên, nếu chuỗi kết quả đã hết, thì
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    562 sẽ được nâng lên ngay lập tức,

  • nếu

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    46 không được xác định, hàm async sẽ trả về giá trị được xác định bởi
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    79, do đó, theo mặc định, hàm async trả về một đối tượng
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    555 mới

Đặt thông số kỹ thuật của

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 hoặc
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 thành chức năng không đồng bộ sẽ dẫn đến một đối tượng coroutine được trả về sau khi gọi

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
23

Đặt thông số kỹ thuật của

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 hoặc
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
555 thành một lớp có các hàm không đồng bộ và đồng bộ sẽ tự động phát hiện các hàm đồng bộ và đặt chúng là
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 (nếu mô hình gốc là
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
555 hoặc
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40) hoặc
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 (nếu mô hình gốc là
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36). Tất cả các chức năng không đồng bộ sẽ là
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
555

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
24

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

assert_awaited()

Khẳng định rằng mô phỏng đã được chờ đợi ít nhất một lần. Lưu ý rằng điều này tách biệt với đối tượng đã được gọi, phải sử dụng từ khóa

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
577

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
25

assert_awaited_once()

Khẳng định rằng mô phỏng đã được chờ đợi chính xác một lần

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
26

assert_awaited_with(*args , **kwargs)

Khẳng định rằng chờ đợi cuối cùng là với các đối số được chỉ định

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
27

assert_awaited_once_with(*args , **kwargs)

Khẳng định rằng mô phỏng đã được chờ chính xác một lần và với các đối số đã chỉ định

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
28

assert_any_await(*args , **kwargs)

Khẳng định mô hình đã từng được chờ đợi với các đối số được chỉ định

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
29

assert_has_awaits(cuộc gọi , any_order=False)

Khẳng định mô hình đã được chờ đợi với các cuộc gọi được chỉ định. Danh sách

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
578 được kiểm tra để chờ đợi

Nếu any_order là sai thì chờ phải tuần tự. Có thể có thêm cuộc gọi trước hoặc sau thời gian chờ được chỉ định

Nếu any_order là true thì các hàng đợi có thể theo bất kỳ thứ tự nào, nhưng tất cả chúng phải xuất hiện trong

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
578

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40

assert_not_awaited()

Khẳng định rằng giả không bao giờ được chờ đợi

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
41

reset_mock(*args , **kwargs)

Xem

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
580. Cũng đặt
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
581 thành 0,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
582 thành Không và xóa
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
578

await_count

Một số nguyên theo dõi số lần đối tượng giả đã được chờ đợi

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
42

await_args

Đây là

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
78 (nếu mô phỏng chưa được chờ đợi) hoặc các đối số mà mô hình được chờ đợi lần cuối với. Các chức năng giống như
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
585

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
43

await_args_list

Đây là danh sách tất cả các lần chờ được thực hiện cho đối tượng giả theo trình tự (vì vậy độ dài của danh sách là số lần nó được chờ). Trước khi bất kỳ sự chờ đợi nào được thực hiện, nó là một danh sách trống

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
44

Gọi¶

Các đối tượng giả có thể gọi được. Cuộc gọi sẽ trả về giá trị được đặt làm thuộc tính

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
79. Giá trị trả về mặc định là một đối tượng Mock mới;

Các cuộc gọi được thực hiện cho đối tượng sẽ được ghi lại trong các thuộc tính như

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
513 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
514

Nếu

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 được đặt thì nó sẽ được gọi sau khi cuộc gọi đã được ghi âm, vì vậy nếu
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 phát sinh ngoại lệ thì cuộc gọi vẫn được ghi âm

Cách đơn giản nhất để làm cho một mô phỏng đưa ra một ngoại lệ khi được gọi là biến

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 thành một lớp hoặc thể hiện ngoại lệ

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
45

Nếu

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 là một hàm thì bất cứ thứ gì mà hàm đó trả về là thứ gọi đến trả về giả. Hàm
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 được gọi với các đối số giống như hàm giả. Điều này cho phép bạn thay đổi giá trị trả về của cuộc gọi một cách linh hoạt, dựa trên đầu vào

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46

Nếu bạn muốn mô phỏng vẫn trả về giá trị trả về mặc định (mô hình mới) hoặc bất kỳ giá trị trả về đã đặt nào, thì có hai cách để thực hiện việc này. Trả về

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
594 từ bên trong
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 hoặc trả về
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
77

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
47

Để xóa một

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 và quay lại hành vi mặc định, hãy đặt
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 thành
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
78

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
48

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 cũng có thể là bất kỳ đối tượng lặp nào. Các cuộc gọi lặp đi lặp lại tới mô phỏng sẽ trả về các giá trị từ khả năng lặp lại (cho đến khi hết khả năng lặp lại và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
801 được nâng lên)

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
49

Nếu bất kỳ thành viên nào của iterable là ngoại lệ, chúng sẽ được nâng lên thay vì trả lại

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
60

Xóa thuộc tính¶

Đối tượng giả tạo thuộc tính theo yêu cầu. Điều này cho phép họ giả vờ là đối tượng thuộc bất kỳ loại nào

Bạn có thể muốn một đối tượng mô phỏng trả về

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
802 cho lệnh gọi
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
803 hoặc tăng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
47 khi một thuộc tính được tìm nạp. Bạn có thể làm điều này bằng cách cung cấp một đối tượng dưới dạng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
531 cho mô hình giả, nhưng điều đó không phải lúc nào cũng thuận tiện

Bạn “chặn” các thuộc tính bằng cách xóa chúng. Sau khi bị xóa, việc truy cập một thuộc tính sẽ tăng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
47

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
61

Tên giả và thuộc tính tên¶

Vì “tên” là một đối số của hàm tạo

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36, nên nếu bạn muốn đối tượng giả của mình có thuộc tính “tên”, bạn không thể chuyển nó vào lúc tạo. Có hai lựa chọn thay thế. Một lựa chọn là sử dụng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
84

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
62

Một tùy chọn đơn giản hơn là chỉ cần đặt thuộc tính “tên” sau khi tạo mô hình

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
63

Đính kèm Mocks dưới dạng thuộc tính¶

Khi bạn đính kèm một mô hình làm thuộc tính của một mô hình khác (hoặc dưới dạng giá trị trả về), nó sẽ trở thành “con” của mô hình đó. Các cuộc gọi đến đứa trẻ được ghi lại trong các thuộc tính

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
95 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
88 của cha mẹ. Điều này hữu ích để định cấu hình các mô hình con và sau đó đính kèm chúng vào phần tử gốc hoặc để gắn các phần tử giả vào phần tử gốc ghi lại tất cả các cuộc gọi đến phần tử con và cho phép bạn đưa ra các xác nhận về thứ tự các cuộc gọi giữa các phần tử mô phỏng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
64

Ngoại lệ cho điều này là nếu mô hình có tên. Điều này cho phép bạn ngăn chặn việc “làm cha mẹ” nếu vì lý do nào đó mà bạn không muốn điều đó xảy ra

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
65

Các mô phỏng do

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 tạo cho bạn sẽ tự động được đặt tên. Để đính kèm các mô hình có tên cho cha mẹ, bạn sử dụng phương pháp
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
812

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
66

1

Các ngoại lệ duy nhất là các phương thức và thuộc tính ma thuật (những thuộc tính có dấu gạch dưới kép ở đầu và cuối). Mock không tạo ra những thứ này mà thay vào đó tạo ra một

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
47. Điều này là do trình thông dịch thường sẽ yêu cầu ngầm các phương thức này và rất bối rối khi nhận một đối tượng Mock mới khi nó mong đợi một phương thức ma thuật. Nếu bạn cần hỗ trợ phương pháp ma thuật, hãy xem phương pháp ma thuật .

Các bản vá¶

Các bộ trang trí vá chỉ được sử dụng để vá các đối tượng trong phạm vi chức năng mà chúng trang trí. Họ tự động xử lý việc gỡ bản vá cho bạn, ngay cả khi các trường hợp ngoại lệ được đưa ra. Tất cả các chức năng này cũng có thể được sử dụng với các câu lệnh hoặc như các công cụ trang trí lớp

vá¶

Ghi chú

Điều quan trọng là thực hiện vá trong đúng không gian tên. Xem phần nơi để vá

đơn vị nhất. chế nhạo. bản vá(mục tiêu , mới=DEFAULT, spec=None, create=False, spec_set=None, autospec=None, new_callable=None, **kwargs)

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 hoạt động như một công cụ trang trí chức năng, công cụ trang trí lớp hoặc trình quản lý ngữ cảnh. Bên trong phần thân của hàm hoặc với câu lệnh, mục tiêu được vá bằng một đối tượng mới. Khi hàm/với câu lệnh thoát, bản vá được hoàn tác

Nếu new bị bỏ qua, thì mục tiêu được thay thế bằng một

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
555 nếu đối tượng được vá là một hàm không đồng bộ hoặc một
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 nếu không. Nếu
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 được sử dụng làm công cụ trang trí và new bị bỏ qua, mô hình đã tạo sẽ được chuyển vào dưới dạng đối số bổ sung cho hàm được trang trí. Nếu
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 được sử dụng làm trình quản lý bối cảnh, mô hình đã tạo sẽ được trả về bởi trình quản lý bối cảnh

mục tiêu phải là một chuỗi ở dạng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
819. Mục tiêu được nhập và đối tượng đã chỉ định được thay thế bằng đối tượng mới, do đó, mục tiêu phải có thể nhập được từ môi trường mà bạn đang gọi
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 từ. Mục tiêu được nhập khi chức năng trang trí được thực thi, không phải lúc trang trí

Các đối số từ khóa spec và spec_set được chuyển đến

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 nếu bản vá đang tạo một đối số cho bạn

Ngoài ra, bạn có thể vượt qua

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
822 hoặc
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
823, điều này khiến bản vá chuyển vào đối tượng bị giả định là đối tượng spec/spec_set

new_callable cho phép bạn chỉ định một lớp khác hoặc đối tượng có thể gọi được, sẽ được gọi để tạo đối tượng mới. Theo mặc định,

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
555 được sử dụng cho các chức năng không đồng bộ và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 cho phần còn lại

Một dạng đặc tả mạnh mẽ hơn là autospec. Nếu bạn đặt

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
826 thì mô hình sẽ được tạo với thông số kỹ thuật từ đối tượng được thay thế. Tất cả các thuộc tính của mô phỏng cũng sẽ có thông số của thuộc tính tương ứng của đối tượng được thay thế. Các phương thức và hàm bị giả lập sẽ được kiểm tra các đối số của chúng và sẽ tăng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
827 nếu chúng được gọi với chữ ký sai. Đối với các mô phỏng thay thế một lớp, giá trị trả về của chúng ('thể hiện') sẽ có cùng thông số kỹ thuật với lớp. Xem chức năng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
55 và Tự động xác định .

Thay vì

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
826, bạn có thể chuyển
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
830 để sử dụng một đối tượng tùy ý làm thông số kỹ thuật thay vì đối tượng được thay thế

Theo mặc định,

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 sẽ không thể thay thế các thuộc tính không tồn tại. Nếu bạn vượt qua
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
832 và thuộc tính không tồn tại, bản vá sẽ tạo thuộc tính cho bạn khi chức năng được vá được gọi và xóa lại nó sau khi chức năng được vá đã thoát. Điều này hữu ích để viết các bài kiểm tra đối với các thuộc tính mà mã sản xuất của bạn tạo ra trong thời gian chạy. Nó được tắt theo mặc định vì nó có thể nguy hiểm. Khi nó được bật, bạn có thể viết các bài kiểm tra vượt qua đối với các API không thực sự tồn tại

Ghi chú

Đã thay đổi trong phiên bản 3. 5. Nếu bạn đang vá các nội trang trong một mô-đun thì bạn không cần phải vượt qua

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
832, nó sẽ được thêm vào theo mặc định.

Bản vá có thể được sử dụng làm công cụ trang trí lớp

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
834. Nó hoạt động bằng cách trang trí từng phương pháp kiểm tra trong lớp. Điều này làm giảm mã soạn sẵn khi các phương pháp thử nghiệm của bạn chia sẻ một tập hợp các bản vá chung.
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 tìm các bài kiểm tra bằng cách tìm tên phương thức bắt đầu bằng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
836. Theo mặc định, đây là
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
837, phù hợp với cách mà
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
42 tìm thấy các bài kiểm tra. Bạn có thể chỉ định tiền tố thay thế bằng cách đặt
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
836

Bản vá có thể được sử dụng làm trình quản lý ngữ cảnh, với câu lệnh with. Ở đây, bản vá áp dụng cho khối thụt lề sau câu lệnh with. Nếu bạn sử dụng “as” thì đối tượng được vá sẽ được gắn với tên sau “as”;

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 lấy đối số từ khóa tùy ý. Những thứ này sẽ được chuyển tới
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
555 nếu đối tượng được vá lỗi không đồng bộ, tới
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 nếu không thì tới new_callable nếu được chỉ định

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
844,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
845 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
846 có sẵn cho các trường hợp sử dụng thay thế

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 với tư cách là người trang trí chức năng, tạo bản mô phỏng cho bạn và chuyển nó vào chức năng được trang trí

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
67

Việc vá một lớp sẽ thay thế lớp đó bằng một phiên bản

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40. Nếu lớp được khởi tạo trong mã đang được kiểm tra thì đó sẽ là
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
79 của mô hình giả sẽ được sử dụng

Nếu lớp được khởi tạo nhiều lần, bạn có thể sử dụng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 để trả về một mô hình mới mỗi lần. Ngoài ra, bạn có thể đặt return_value thành bất kỳ thứ gì bạn muốn

Để định cấu hình giá trị trả về trên các phương thức của phiên bản trên lớp đã vá, bạn phải thực hiện việc này trên

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
79. Ví dụ

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
68

Nếu bạn sử dụng spec hoặc spec_set và

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 đang thay thế một lớp, thì giá trị trả về của mô hình đã tạo sẽ có cùng thông số kỹ thuật

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
69

Đối số new_callable rất hữu ích khi bạn muốn sử dụng một lớp thay thế cho

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 mặc định cho mô hình đã tạo. Ví dụ: nếu bạn muốn sử dụng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
62

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
80

Một trường hợp sử dụng khác có thể là thay thế một đối tượng bằng một thực thể

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
855

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
81

Khi

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 đang tạo một mô hình cho bạn, thông thường điều đầu tiên bạn cần làm là định cấu hình mô hình. Một số cấu hình đó có thể được thực hiện trong lệnh gọi bản vá. Bất kỳ từ khóa tùy ý nào bạn chuyển vào cuộc gọi sẽ được sử dụng để đặt thuộc tính trên mô hình đã tạo

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
82

Cũng như các thuộc tính trên các thuộc tính mô phỏng đã tạo, như

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
79 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46, của các mô hình con cũng có thể được định cấu hình. Chúng không hợp lệ về mặt cú pháp để chuyển trực tiếp dưới dạng đối số từ khóa, nhưng một từ điển với các khóa này vẫn có thể được mở rộng thành lệnh gọi
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 bằng cách sử dụng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
544

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
83

Theo mặc định, cố gắng vá một hàm trong một mô-đun (hoặc một phương thức hoặc một thuộc tính trong một lớp) không tồn tại sẽ không thành công với

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
47

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
84

nhưng thêm

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
832 vào lệnh gọi tới
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 sẽ làm cho ví dụ trước đó hoạt động như mong đợi

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
85

Đã thay đổi trong phiên bản 3. 8. ______037 hiện trả về một

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
555 nếu mục tiêu là một hàm không đồng bộ.

vá. sự vật¶

bản vá lỗi. đối tượng(mục tiêu , thuộc tính, new=DEFAULT, spec=None, create=False, spec_set=None, autospec=None, new_callable=None, **kwargs)

vá thành viên được đặt tên (thuộc tính) trên một đối tượng (đích) bằng một đối tượng giả

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
866 có thể được sử dụng làm trang trí, trang trí lớp hoặc quản lý ngữ cảnh. Các đối số new, spec, create, spec_set, autospec và new_callable có cùng ý nghĩa như đối với
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37. Giống như
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
866 nhận các đối số từ khóa tùy ý để định cấu hình đối tượng giả mà nó tạo

Khi được sử dụng làm công cụ trang trí lớp học,

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
866 vinh danh
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
836 vì đã chọn phương thức bọc

Bạn có thể gọi

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
866 với ba đối số hoặc hai đối số. Dạng ba đối số lấy đối tượng được vá, tên thuộc tính và đối tượng để thay thế thuộc tính bằng

Khi gọi với biểu mẫu hai đối số, bạn bỏ qua đối tượng thay thế và một mô hình giả được tạo cho bạn và được chuyển vào dưới dạng đối số bổ sung cho hàm được trang trí

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
86

spec, create và các đối số khác của

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
866 có cùng ý nghĩa như đối với
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37

vá. chính tả¶

bản vá lỗi. dict(in_dict , giá trị=(), clear=False, **kwargs)

Vá một từ điển hoặc từ điển giống như đối tượng và khôi phục từ điển về trạng thái ban đầu sau khi kiểm tra

in_dict có thể là từ điển hoặc ánh xạ như vùng chứa. Nếu đó là ánh xạ thì ít nhất nó phải hỗ trợ nhận, đặt và xóa các mục cùng với việc lặp qua các phím

in_dict cũng có thể là một chuỗi chỉ định tên của từ điển, sau đó sẽ được tìm nạp bằng cách nhập nó

các giá trị có thể là một từ điển các giá trị để đặt trong từ điển. các giá trị cũng có thể lặp lại các cặp

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
875

Nếu rõ ràng là đúng thì từ điển sẽ bị xóa trước khi các giá trị mới được đặt

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
52 cũng có thể được gọi với các đối số từ khóa tùy ý để đặt giá trị trong từ điển

Đã thay đổi trong phiên bản 3. 8. ______052 hiện trả về từ điển đã vá lỗi khi được sử dụng làm trình quản lý bối cảnh.

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
52 có thể được sử dụng làm trình quản lý ngữ cảnh, trang trí hoặc trang trí lớp

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
87

Khi được sử dụng làm công cụ trang trí lớp học,

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
52 vinh danh
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
836 (mặc định là
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
837) để chọn phương thức bọc

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
88

Nếu bạn muốn sử dụng tiền tố khác cho bài kiểm tra của mình, bạn có thể thông báo cho người vá về tiền tố khác bằng cách đặt

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
836. Để biết thêm chi tiết về cách thay đổi giá trị của, hãy xem TEST_PREFIX .

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
52 có thể được sử dụng để thêm thành viên vào từ điển hoặc đơn giản là để kiểm tra thay đổi từ điển và đảm bảo từ điển được khôi phục khi kiểm tra kết thúc

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
89

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
00

Có thể sử dụng từ khóa trong lệnh gọi

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
52 để đặt giá trị trong từ điển

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
01

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
52 có thể được sử dụng với từ điển giống như các đối tượng không thực sự là từ điển. Ở mức tối thiểu, chúng phải hỗ trợ nhận, cài đặt, xóa và lặp lại hoặc kiểm tra tư cách thành viên. Điều này tương ứng với các phương pháp ma thuật
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
886,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
887,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
888 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
889 hoặc
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
890

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
02

vá. nhiều¶

bản vá lỗi. nhiều(mục tiêu , thông số kỹ thuật=None, create=False, spec_set=None, autospec=None, new_callable=None, **kwargs)

Thực hiện nhiều bản vá trong một cuộc gọi. Nó lấy đối tượng được vá (dưới dạng đối tượng hoặc chuỗi để tìm nạp đối tượng bằng cách nhập) và đối số từ khóa cho các bản vá

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
03

Sử dụng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
77 làm giá trị nếu bạn muốn
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
892 tạo mô phỏng cho bạn. Trong trường hợp này, các mô phỏng đã tạo được chuyển vào một chức năng được trang trí theo từ khóa và một từ điển được trả về khi
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
892 được sử dụng làm trình quản lý bối cảnh

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
892 có thể được sử dụng như một người trang trí, người trang trí lớp hoặc người quản lý ngữ cảnh. Các đối số spec, spec_set, create, autospec và new_callable có cùng ý nghĩa như đối với
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37. Những đối số này sẽ được áp dụng cho tất cả các bản vá được thực hiện bởi
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
892

Khi được sử dụng làm công cụ trang trí lớp học,

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
892 vinh danh
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
836 vì đã chọn phương thức bọc

Nếu bạn muốn

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
892 tạo giả cho mình, thì bạn có thể sử dụng giá trị
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
77. Nếu bạn sử dụng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
892 làm công cụ trang trí thì các mô hình đã tạo sẽ được chuyển vào hàm trang trí theo từ khóa

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
04

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
892 có thể được lồng với các trình trang trí
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
203 khác, nhưng đặt các đối số được truyền theo từ khóa sau bất kỳ đối số tiêu chuẩn nào được tạo bởi
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
05

Nếu

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
892 được sử dụng làm trình quản lý ngữ cảnh, thì giá trị được trả về bởi trình quản lý ngữ cảnh là một từ điển trong đó các giả được tạo được khóa theo tên

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
06

phương pháp vá lỗi. bắt đầu và dừng¶

Tất cả các trình vá lỗi đều có các phương thức

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
206 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
207. Những điều này làm cho việc vá lỗi trong các phương thức
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
208 trở nên đơn giản hơn hoặc khi bạn muốn thực hiện nhiều bản vá mà không cần lồng các bộ trang trí hoặc với các câu lệnh

Để sử dụng chúng, hãy gọi

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
866 hoặc
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
52 như bình thường và giữ tham chiếu đến đối tượng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
212 được trả về. Sau đó, bạn có thể gọi
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
206 để đặt bản vá vào vị trí và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
207 để hoàn tác

Nếu bạn đang sử dụng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 để tạo một bản giả cho bạn thì nó sẽ được trả về bằng lệnh gọi tới
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
216

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
07

Một trường hợp sử dụng điển hình cho việc này có thể là để thực hiện nhiều bản vá trong phương pháp

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
208 của một
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
834

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
08

thận trọng

Nếu bạn sử dụng kỹ thuật này, bạn phải đảm bảo rằng việc vá lỗi được “hoàn tác” bằng cách gọi số

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
219. Điều này có thể phức tạp hơn bạn nghĩ, bởi vì nếu một ngoại lệ được nêu ra trong
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
208 thì
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
221 sẽ không được gọi.
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
222 khiến việc này trở nên dễ dàng hơn

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
09

Là một phần thưởng bổ sung, bạn không còn cần phải giữ tham chiếu đến đối tượng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
212

Cũng có thể dừng tất cả các bản vá đã bắt đầu bằng cách sử dụng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
224

bản vá lỗi. dừng()

Dừng tất cả các bản vá đang hoạt động. Chỉ dừng các bản vá bắt đầu bằng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
225

vá nội trang¶

Bạn có thể vá bất kỳ nội trang nào trong một mô-đun. Ví dụ sau đây vá lỗi dựng sẵn

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
226

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
00

TEST_PREFIX¶

Tất cả các bản vá có thể được sử dụng làm trang trí lớp. Khi được sử dụng theo cách này, chúng bao bọc mọi phương thức kiểm tra trên lớp. Các bản vá nhận ra các phương thức bắt đầu bằng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
837 là phương thức thử nghiệm. Đây là cách mà
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
228 mặc định tìm các phương pháp kiểm tra

Có thể bạn muốn sử dụng một tiền tố khác cho các bài kiểm tra của mình. Bạn có thể thông báo cho người vá về tiền tố khác bằng cách đặt

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
836

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
01

Nesting Patch Decorators¶

Nếu bạn muốn thực hiện nhiều bản vá thì bạn chỉ cần xếp chồng các bộ trang trí

Bạn có thể xếp chồng lên nhiều bộ trang trí bản vá bằng cách sử dụng mẫu này

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
02

Lưu ý rằng các trang trí được áp dụng từ dưới lên trên. Đây là cách tiêu chuẩn mà Python áp dụng các trình trang trí. Thứ tự của các mô hình đã tạo được chuyển vào chức năng kiểm tra của bạn khớp với thứ tự này

Vá ở đâu¶

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 hoạt động bằng cách (tạm thời) thay đổi đối tượng mà tên trỏ tới bằng một đối tượng khác. Có thể có nhiều tên trỏ đến bất kỳ đối tượng riêng lẻ nào, vì vậy để quá trình vá hoạt động, bạn phải đảm bảo rằng bạn vá tên được sử dụng bởi hệ thống đang kiểm tra

Nguyên tắc cơ bản là bạn vá nơi một đối tượng được tìm kiếm, không nhất thiết phải giống với nơi nó được xác định. Một vài ví dụ sẽ giúp làm rõ điều này

Hãy tưởng tượng chúng tôi có một dự án mà chúng tôi muốn thử nghiệm với cấu trúc sau

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
03

Bây giờ chúng tôi muốn kiểm tra

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
231 nhưng chúng tôi muốn mô phỏng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
232 bằng cách sử dụng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37. Vấn đề là khi chúng tôi nhập mô-đun b, điều mà chúng tôi sẽ phải thực hiện thì nó sẽ nhập
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
232 từ mô-đun a. Nếu chúng tôi sử dụng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 để mô phỏng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
236 thì nó sẽ không ảnh hưởng gì đến bài kiểm tra của chúng tôi;

Điều quan trọng là tìm ra

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
232 nơi nó được sử dụng (hoặc nơi nó được tra cứu). Trong trường hợp này,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
231 sẽ thực sự tra cứu
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
232 trong mô-đun b, nơi chúng tôi đã nhập nó. Việc vá sẽ trông giống như

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
04

Tuy nhiên, hãy xem xét kịch bản thay thế trong đó thay vì

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
241 mô-đun b sử dụng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
242 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
231 sử dụng
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
236. Cả 2 hình thức nhập khẩu này đều thông dụng. Trong trường hợp này, lớp chúng tôi muốn vá đang được tra cứu trong mô-đun và vì vậy chúng tôi phải vá
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
236 để thay thế

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
05

Vá mô tả và đối tượng proxy¶

Cả vá và vá. đối tượng vá chính xác và khôi phục mô tả. phương thức lớp, phương thức tĩnh và thuộc tính. Bạn nên vá những thứ này trên lớp thay vì một cá thể. Chúng cũng hoạt động với một số đối tượng truy cập thuộc tính proxy, như đối tượng cài đặt django

MagicMock và hỗ trợ phương pháp ma thuật¶

Phương Pháp Ma Thuật Chế nhạo¶

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 hỗ trợ chế nhạo các phương thức giao thức Python, còn được gọi là "phương thức ma thuật". Điều này cho phép các đối tượng giả thay thế các thùng chứa hoặc các đối tượng khác triển khai các giao thức Python

Vì các phương pháp ma thuật được tra cứu khác với các phương pháp thông thường 2, hỗ trợ này đã được triển khai đặc biệt. Điều này có nghĩa là chỉ các phương pháp ma thuật cụ thể mới được hỗ trợ. Danh sách được hỗ trợ bao gồm hầu hết tất cả chúng. Nếu có bất kỳ thiếu mà bạn cần xin vui lòng cho chúng tôi biết

Bạn mô phỏng các phương thức ma thuật bằng cách đặt phương thức mà bạn quan tâm vào một hàm hoặc một phiên bản mô phỏng. Nếu bạn đang sử dụng một hàm thì hàm đó phải lấy

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
247 làm đối số đầu tiên 3

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
06

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
07

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
08

One use case for this is for mocking objects used as context managers in a

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
248 statement

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
09

Calls to magic methods do not appear in

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
95, but they are recorded in
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
88

Ghi chú

If you use the spec keyword argument to create a mock then attempting to set a magic method that isn’t in the spec will raise an

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
47

The full list of supported magic methods is

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    252,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    253,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    254 and
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    255

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    256,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    257 and
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    258

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    259,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    260,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    261 and
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    262

  • Comparisons.

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    263,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    264,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    265,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    266,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    267 and
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    268

  • Container methods.

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    269,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    270,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    271,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    272,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    273,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    274,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    275 và
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    276

  • Context manager.

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    277,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    278,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    279 and
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    280

  • Unary numeric methods.

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    281,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    282 and
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    283

  • The numeric methods (including right hand and in-place variants).

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    284,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    285,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    286,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    287,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    288,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    289,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    290,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    291,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    292,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    293,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    294,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    295,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    296, and
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    297

  • Numeric conversion methods.

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    298,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    299,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    400 and
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    401

  • Descriptor methods.

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    402,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    403 and
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    404

  • Pickling.

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    405,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    406,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    407,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    408,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    409 and
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    410

  • File system path representation.

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    411

  • Asynchronous iteration methods.

    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    412 and
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    413

Changed in version 3. 8. Added support for

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
414.

Changed in version 3. 8. Added support for

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
279,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
280,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
412 and
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
413.

The following methods exist but are not supported as they are either in use by mock, can’t be set dynamically, or can cause problems

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    419,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    420,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    57 and
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    422

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    423,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    424,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    425,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    426

Magic Mock¶

There are two

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 variants.
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 and
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
63

class unittest. mock. MagicMock(*args , **kw)

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 is a subclass of
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 with default implementations of most of the magic methods. You can use
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 without having to configure the magic methods yourself

The constructor parameters have the same meaning as for

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36

If you use the spec or spec_set arguments then only magic methods that exist in the spec will be created

class unittest. mock. NonCallableMagicMock(*args , **kw)

A non-callable version of

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40

The constructor parameters have the same meaning as for

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40, with the exception of return_value and side_effect which have no meaning on a non-callable mock

The magic methods are setup with

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 objects, so you can configure them and use them in the usual way

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
00

By default many of the protocol methods are required to return objects of a specific type. These methods are preconfigured with a default return value, so that they can be used without you having to do anything if you aren’t interested in the return value. You can still set the return value manually if you want to change the default

Methods and their defaults

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    263.
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    438

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    264.
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    438

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    265.
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    438

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    266.
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    438

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    299.
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    446

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    272.
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    802

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    273.
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    450

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    274.
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    452

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    278.
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    802

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    280.
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    802

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    298.
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    458

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    400.
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    460

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    461.
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    93

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    401.
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    446

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    252. default hash for the mock

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    255. default str for the mock

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    253. default sizeof for the mock

For example

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
01

The two equality methods,

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
468 and
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
469, are special. They do the default equality comparison on identity, using the
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 attribute, unless you change their return value to return something else

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
02

Giá trị trả về của

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
471 có thể là bất kỳ đối tượng lặp nào và không bắt buộc phải là một trình lặp

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
03

Nếu giá trị trả về là một trình lặp, thì việc lặp lại nó một lần sẽ tiêu thụ nó và các lần lặp tiếp theo sẽ dẫn đến một danh sách trống

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
04

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 có tất cả các phương pháp ma thuật được hỗ trợ được định cấu hình ngoại trừ một số phương pháp tối nghĩa và lỗi thời. Bạn vẫn có thể thiết lập những thứ này nếu muốn

Các phương pháp ma thuật được hỗ trợ nhưng không được thiết lập theo mặc định trong

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 là

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    258

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    256

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    257

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    402,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    403 và
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    404

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    275 và
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    276

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    405,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    406,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    407,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    408,
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    409 và
    >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    410

  • >>> mock = Mock(side_effect=KeyError('foo'))
    >>> mock()
    Traceback (most recent call last):
     ...
    KeyError: 'foo'
    
    488

2

Các phương thức ma thuật nên được tra cứu trên lớp hơn là ví dụ. Các phiên bản Python khác nhau không thống nhất về việc áp dụng quy tắc này. Các phương thức giao thức được hỗ trợ sẽ hoạt động với tất cả các phiên bản Python được hỗ trợ

3

Về cơ bản, chức năng này được kết nối với lớp, nhưng mỗi phiên bản

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 được giữ cách ly với các phiên bản khác

Người trợ giúp¶

lính gác¶

đơn vị nhất. chế nhạo. trọng điểm

Đối tượng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
38 cung cấp một cách thuận tiện để cung cấp các đối tượng duy nhất cho các bài kiểm tra của bạn

Các thuộc tính được tạo theo yêu cầu khi bạn truy cập chúng theo tên. Truy cập cùng một thuộc tính sẽ luôn trả về cùng một đối tượng. Các đối tượng được trả về có một repr hợp lý để có thể đọc được các thông báo lỗi kiểm tra

Đã thay đổi trong phiên bản 3. 7. Các thuộc tính

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
38 hiện giữ nguyên danh tính của chúng khi chúng là
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
492 hoặc
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
493.

Đôi khi, khi kiểm tra, bạn cần kiểm tra xem một đối tượng cụ thể có được truyền dưới dạng đối số cho phương thức khác hay không hoặc được trả về. Có thể phổ biến để tạo các đối tượng được đặt tên để kiểm tra điều này.

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
38 cung cấp một cách thuận tiện để tạo và kiểm tra danh tính của các đối tượng như thế này

Trong ví dụ này, chúng tôi vá khỉ

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
495 để trả về
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
496

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
05

MẶC ĐỊNH¶

đơn vị nhất. chế nhạo. MẶC ĐỊNH

Đối tượng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
77 là một lính canh được tạo sẵn (thực ra là
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
498). Nó có thể được sử dụng bởi các hàm
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
46 để chỉ ra rằng nên sử dụng giá trị trả về bình thường

cuộc gọi¶

đơn vị nhất. chế nhạo. gọi(*args , **kwargs)

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
600 là một đối tượng trợ giúp để đưa ra các xác nhận đơn giản hơn, để so sánh với
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
513,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
514,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
88 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
95.
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
600 cũng có thể được sử dụng với
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
547

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
06

gọi. call_list()

Đối với một đối tượng cuộc gọi đại diện cho nhiều cuộc gọi,

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
607 trả về danh sách tất cả các cuộc gọi trung gian cũng như cuộc gọi cuối cùng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
608 đặc biệt hữu ích để đưa ra các xác nhận về “các cuộc gọi theo chuỗi”. Một cuộc gọi chuỗi là nhiều cuộc gọi trên một dòng mã. Điều này dẫn đến nhiều mục trong
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
88 trên một bản giả. Xây dựng thủ công chuỗi cuộc gọi có thể tẻ nhạt

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
607 có thể xây dựng chuỗi cuộc gọi từ cùng một cuộc gọi được xâu chuỗi

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
07

A

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
517 object is either a tuple of (positional args, keyword args) or (name, positional args, keyword args) depending on how it was constructed. When you construct them yourself this isn’t particularly interesting, but the
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
517 objects that are in the
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
585,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
614 and
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
615 attributes can be introspected to get at the individual arguments they contain

The

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
517 objects in
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
585 and
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
614 are two-tuples of (positional args, keyword args) whereas the
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
517 objects in
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
615, along with ones you construct yourself, are three-tuples of (name, positional args, keyword args)

You can use their “tupleness” to pull out the individual arguments for more complex introspection and assertions. The positional arguments are a tuple (an empty tuple if there are no positional arguments) and the keyword arguments are a dictionary

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
08

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
09

create_autospec¶

unittest. mock. create_autospec(spec , spec_set=False , instance=False , **kwargs)

Create a mock object using another object as a spec. Attributes on the mock will use the corresponding attribute on the spec object as their spec

Functions or methods being mocked will have their arguments checked to ensure that they are called with the correct signature

If spec_set is

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
93 then attempting to set attributes that don’t exist on the spec object will raise an
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
47

If a class is used as a spec then the return value of the mock (the instance of the class) will have the same spec. You can use a class as the spec for an instance object by passing

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
623. The returned mock will only be callable if instances of the mock are callable

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
55 also takes arbitrary keyword arguments that are passed to the constructor of the created mock

See Autospeccing for examples of how to use auto-speccing with

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
55 and the autospec argument to
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37.

Changed in version 3. 8.

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
55 now returns an
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
555 if the target is an async function.

ANY¶

unittest. mock. ANY

Sometimes you may need to make assertions about some of the arguments in a call to mock, but either not care about some of the arguments or want to pull them individually out of

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
513 and make more complex assertions on them

To ignore certain arguments you can pass in objects that compare equal to everything. Calls to

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
85 and
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
86 will then succeed no matter what was passed in

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
10

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
632 can also be used in comparisons with call lists like
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
88

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
11

FILTER_DIR¶

unittest. mock. FILTER_DIR

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
500 is a module level variable that controls the way mock objects respond to
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
635. Giá trị mặc định là
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
93, sử dụng bộ lọc được mô tả bên dưới, để chỉ hiển thị các thành viên hữu ích. If you dislike this filtering, or need to switch it off for diagnostic purposes, then set
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
637

With filtering on,

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
99 shows only useful attributes and will include any dynamically created attributes that wouldn’t normally be shown. If the mock was created with a spec (or autospec of course) then all the attributes from the original are shown, even if they haven’t been accessed yet

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
12

Many of the not-very-useful (private to

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 rather than the thing being mocked) underscore and double underscore prefixed attributes have been filtered from the result of calling
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
635 on a
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36. If you dislike this behaviour you can switch it off by setting the module level switch
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
500

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
13

Alternatively you can just use

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
643 (instance members) and
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
644 (type members) to bypass the filtering irrespective of
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
645

mock_open¶

unittest. mock. mock_open(mock=None , read_data=None)

A helper function to create a mock to replace the use of

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
646. It works for
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
646 called directly or used as a context manager

The mock argument is the mock object to configure. If

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
78 (the default) then a
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 will be created for you, with the API limited to methods or attributes available on standard file handles

read_data is a string for the

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
650,
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
651, and
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
652 methods of the file handle to return. Calls to those methods will take data from read_data until it is depleted. The mock of these methods is pretty simplistic. every time the mock is called, the read_data is rewound to the start. If you need more control over the data that you are feeding to the tested code you will need to customize this mock for yourself. When that is insufficient, one of the in-memory filesystem packages on PyPI can offer a realistic filesystem for testing

Changed in version 3. 4. Added

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
651 and
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
652 support. The mock of
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
650 changed to consume read_data rather than returning it on each call.

Changed in version 3. 5. read_data is now reset on each call to the mock.

Changed in version 3. 8. Added

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
889 to implementation so that iteration (such as in for loops) correctly consumes read_data.

Using

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
646 as a context manager is a great way to ensure your file handles are closed properly and is becoming common

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
14

The issue is that even if you mock out the call to

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
646 it is the returned object that is used as a context manager (and has
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
659 and
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
660 called)

Chế nhạo các trình quản lý bối cảnh với một

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
40 là đủ phổ biến và đủ khó để một chức năng trợ giúp hữu ích

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
15

And for reading files

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
16

Autospeccing¶

Autospeccing dựa trên tính năng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
531 hiện có của mô hình. Nó giới hạn api của các mô hình đối với api của một đối tượng ban đầu (thông số kỹ thuật), nhưng nó được đệ quy (được triển khai một cách lười biếng) để các thuộc tính của các mô hình chỉ có cùng một api với các thuộc tính của thông số kỹ thuật. Ngoài ra, các hàm/phương thức giả định có chữ ký cuộc gọi giống như bản gốc, vì vậy chúng tăng 1827 nếu chúng được gọi không chính xác

Trước khi tôi giải thích cách tự động xác định hoạt động, đây là lý do tại sao nó cần thiết

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 là một đối tượng rất mạnh mẽ và linh hoạt, nhưng nó có hai lỗi khi được sử dụng để mô phỏng các đối tượng khỏi hệ thống đang thử nghiệm. Một trong những lỗi này là dành riêng cho api
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 và lỗi còn lại là một vấn đề chung hơn khi sử dụng các đối tượng giả

Đầu tiên, vấn đề cụ thể đối với

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36.
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
36 có hai phương thức xác nhận cực kỳ tiện dụng.
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
85 và
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
86

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
17

Bởi vì mô phỏng tự động tạo các thuộc tính theo yêu cầu và cho phép bạn gọi chúng bằng các đối số tùy ý, nếu bạn viết sai chính tả một trong các phương thức xác nhận này thì xác nhận của bạn sẽ biến mất

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
18

Các bài kiểm tra của bạn có thể trôi qua một cách im lặng và không chính xác do lỗi đánh máy

Vấn đề thứ hai là tổng quát hơn để chế nhạo. Nếu bạn cấu trúc lại một số mã của mình, đổi tên thành viên, v.v., mọi kiểm tra mã vẫn đang sử dụng api cũ nhưng sử dụng giả thay vì đối tượng thực vẫn sẽ vượt qua. Điều này có nghĩa là tất cả các bài kiểm tra của bạn đều có thể vượt qua mặc dù mã của bạn bị hỏng

Lưu ý rằng đây là một lý do khác khiến bạn cần kiểm tra tích hợp cũng như kiểm tra đơn vị. Kiểm tra mọi thứ trong sự cô lập đều ổn và bảnh bao, nhưng nếu bạn không kiểm tra xem các thiết bị của bạn được “kết nối với nhau” như thế nào thì vẫn còn rất nhiều lỗi mà các bài kiểm tra có thể đã phát hiện ra.

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
670 đã cung cấp một tính năng để trợ giúp việc này, được gọi là xác định. Nếu bạn sử dụng một lớp hoặc cá thể làm
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
531 cho một mô hình thì bạn chỉ có thể truy cập các thuộc tính trên mô hình tồn tại trên lớp thực

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
19

Thông số kỹ thuật chỉ áp dụng cho chính mô hình, vì vậy chúng tôi vẫn gặp vấn đề tương tự với bất kỳ phương thức nào trên mô hình

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
20

Tự động xác định giải quyết vấn đề này. Bạn có thể chuyển

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
826 đến
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 /
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
866 hoặc sử dụng hàm
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
55 để tạo mô phỏng với thông số kỹ thuật. Nếu bạn sử dụng đối số
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
826 cho
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 thì đối tượng đang được thay thế sẽ được sử dụng làm đối tượng đặc tả. Vì đặc tả được thực hiện “lười biếng” (thông số kỹ thuật được tạo khi các thuộc tính trên mô hình được truy cập), bạn có thể sử dụng nó với các đối tượng rất phức tạp hoặc được lồng sâu (như các mô-đun nhập mô-đun nhập mô-đun) mà không ảnh hưởng lớn đến hiệu suất

Đây là một ví dụ về nó được sử dụng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
21

Bạn có thể thấy rằng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
678 có thông số kỹ thuật.
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
678 nhận hai đối số trong hàm tạo (một trong số đó là self). Đây là những gì sẽ xảy ra nếu chúng ta cố gắng gọi nó không chính xác

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
22

Thông số kỹ thuật cũng áp dụng cho các lớp khởi tạo (i. e. giá trị trả về của các mô phỏng được chỉ định)

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
23

Các đối tượng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
680 không thể gọi được, vì vậy giá trị trả về của việc khởi tạo
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
678 được mô phỏng của chúng tôi là một mô hình không thể gọi được. Với thông số kỹ thuật tại chỗ, bất kỳ lỗi chính tả nào trong các xác nhận của chúng tôi sẽ đưa ra lỗi chính xác

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
24

Trong nhiều trường hợp, bạn sẽ chỉ có thể thêm

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
826 vào các cuộc gọi
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 hiện có của mình và sau đó được bảo vệ khỏi các lỗi do lỗi đánh máy và thay đổi api

Ngoài việc sử dụng autospec cho đến

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37, còn có một
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
55 để trực tiếp tạo các bản giả được autospecced

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
25

Tuy nhiên, đây không phải là không có cảnh báo và hạn chế, đó là lý do tại sao nó không phải là hành vi mặc định. Để biết những thuộc tính nào có sẵn trên đối tượng đặc tả, autospec phải xem xét kỹ (thuộc tính truy cập) đặc tả. Khi bạn duyệt qua các thuộc tính trên mô hình, một quá trình duyệt tương ứng của đối tượng ban đầu đang diễn ra dưới mui xe. Nếu bất kỳ đối tượng được chỉ định nào của bạn có các thuộc tính hoặc bộ mô tả có thể kích hoạt thực thi mã thì bạn không thể sử dụng autospec. Mặt khác, tốt hơn hết là thiết kế các đối tượng của bạn sao cho việc xem xét nội tâm được an toàn 4

Một vấn đề nghiêm trọng hơn là các thuộc tính thể hiện thường được tạo trong phương thức

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
686 và hoàn toàn không tồn tại trên lớp. autospec không thể biết về bất kỳ thuộc tính nào được tạo động và hạn chế api đối với các thuộc tính hiển thị

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
26

There are a few different ways of resolving this problem. Cách dễ nhất, nhưng không nhất thiết là ít gây phiền nhiễu nhất, là chỉ cần đặt các thuộc tính bắt buộc trên mô hình sau khi tạo. Chỉ vì autospec không cho phép bạn tìm nạp các thuộc tính không tồn tại trên thông số kỹ thuật nên điều đó không ngăn cản bạn thiết lập chúng

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
27

Có một phiên bản tích cực hơn của cả spec và autospec ngăn bạn thiết lập các thuộc tính không tồn tại. Điều này hữu ích nếu bạn muốn đảm bảo mã của mình cũng chỉ đặt các thuộc tính hợp lệ, nhưng rõ ràng nó ngăn chặn tình huống cụ thể này

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
28

Có lẽ cách tốt nhất để giải quyết vấn đề là thêm các thuộc tính lớp làm giá trị mặc định cho các thành viên thể hiện được khởi tạo trong

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
686. Lưu ý rằng nếu bạn chỉ đặt các thuộc tính mặc định trong
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
686 thì việc cung cấp chúng thông qua các thuộc tính lớp (tất nhiên là được chia sẻ giữa các phiên bản) cũng sẽ nhanh hơn. e. g

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
29

Điều này dẫn đến một vấn đề khác. Việc cung cấp giá trị mặc định là

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
78 cho các thành viên mà sau này sẽ là một đối tượng thuộc loại khác là tương đối phổ biến.
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
78 sẽ vô ích với tư cách là một thông số kỹ thuật vì nó sẽ không cho phép bạn truy cập bất kỳ thuộc tính hoặc phương thức nào trên đó. Vì
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
78 sẽ không bao giờ hữu ích như một thông số kỹ thuật và có thể biểu thị một thành viên thường thuộc loại khác, autospec không sử dụng thông số kỹ thuật cho các thành viên được đặt thành
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
78. Đây sẽ chỉ là những bản giả bình thường (tốt - MagicMocks)

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
30

Nếu việc sửa đổi các lớp sản xuất của bạn để thêm các giá trị mặc định không theo ý thích của bạn thì có nhiều tùy chọn hơn. Một trong số đó chỉ đơn giản là sử dụng một thể hiện làm thông số kỹ thuật thay vì lớp. Cách khác là tạo một lớp con của lớp sản xuất và thêm các giá trị mặc định vào lớp con mà không ảnh hưởng đến lớp sản xuất. Cả hai điều này đều yêu cầu bạn sử dụng một đối tượng thay thế làm thông số kỹ thuật. Rất may,

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
37 hỗ trợ điều này - bạn chỉ cần chuyển đối tượng thay thế làm đối số autospec

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
31

4

Điều này chỉ áp dụng cho các lớp hoặc các đối tượng đã được khởi tạo. Gọi một lớp giả để tạo một thể hiện giả không tạo ra một thể hiện thực. Chỉ có tra cứu thuộc tính - cùng với các cuộc gọi đến

>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'
635 - mới được thực hiện

Niêm phong mô hình¶

đơn vị nhất. chế nhạo. con dấu(mô phỏng)

Niêm phong sẽ vô hiệu hóa việc tạo mô phỏng tự động khi truy cập vào một thuộc tính của mô phỏng đang được niêm phong hoặc bất kỳ thuộc tính nào của nó đã được mô phỏng theo cách đệ quy

Nếu một phiên bản mô phỏng có tên hoặc thông số kỹ thuật được gán cho một thuộc tính thì nó sẽ không được xem xét trong chuỗi niêm phong. Điều này cho phép một người ngăn con dấu cố định một phần của đối tượng giả