Mock trong Python hoạt động như thế nào?

Tóm lược. trong hướng dẫn này, bạn sẽ tìm hiểu về lớp Mock unittest trong Python và cách sử dụng nó để mô phỏng các lớp khác

Giới thiệu về lớp Mock unittest Python

Mocks mô phỏng hành vi của các đối tượng thực. Để kiểm tra một đối tượng phụ thuộc vào các đối tượng khác theo cách riêng biệt, bạn sử dụng các đối tượng giả để mô phỏng các đối tượng thực

Để mô phỏng các đối tượng, bạn sử dụng mô-đun

{'id': 1, 'message': 'hello'}

Code language: Python [python]
7. Mô-đun

{'id': 1, 'message': 'hello'}

Code language: Python [python]
7 cung cấp lớp

{'id': 1, 'message': 'hello'}

Code language: Python [python]
9 cho phép bạn mô phỏng các đối tượng khác

Nó cũng cung cấp lớp

from unittest.mock import Mock

Code language: Python [python]
0 là lớp con của lớp

{'id': 1, 'message': 'hello'}

Code language: Python [python]
9. Bên cạnh các phương thức và thuộc tính của lớp

{'id': 1, 'message': 'hello'}

Code language: Python [python]
9, lớp

from unittest.mock import Mock

Code language: Python [python]
0 có các triển khai của tất cả các phương thức dunder e. g. , __str__ và __repr__

Xem ví dụ sau

from unittest.mock import Mock # create a new mock object mock = Mock[] # mock the api function mock.api.return_value = { 'id': 1, 'message': 'hello' } # call the api function print[mock.api[]]

Code language: Python [python]

đầu ra

{'id': 1, 'message': 'hello'}

Code language: Python [python]

Làm thế nào nó hoạt động

Đầu tiên, nhập lớp

{'id': 1, 'message': 'hello'}

Code language: Python [python]
9 từ mô-đun

{'id': 1, 'message': 'hello'}

Code language: Python [python]
7

from unittest.mock import Mock

Code language: Python [python]

Thứ hai, tạo một thể hiện mới của lớp

{'id': 1, 'message': 'hello'}

Code language: Python [python]
9

mock = Mock[]

Code language: Python [python]

Thứ ba, giả lập hàm

from unittest.mock import Mock

Code language: Python [python]
7 và gán giá trị trả về của nó cho một từ điển

mock.api.return_value = { 'id': 1, 'message': 'hello' }

Code language: Python [python]

Cuối cùng, gọi

from unittest.mock import Mock

Code language: Python [python]
7 từ đối tượng giả. Nó sẽ trả về giá trị được gán

print[mock.api[]]

Code language: Python [python]

Trong ví dụ này, chúng ta có hai đối tượng giả.

from unittest.mock import Mock

Code language: Python [python]
9 &

mock = Mock[]

Code language: Python [python]
0

Hãy thêm câu lệnh

mock = Mock[]

Code language: Python [python]
1 vào chương trình để xem nó hoạt động như thế nào

from unittest.mock import Mock # create a new mock object mock = Mock[] print[mock] # mock the api function mock.api.return_value = { 'id': 1, 'message': 'hello' } print[mock.api] # call the api print[mock.api[]]

Code language: Python [python]

đầu ra

{'id': 1, 'message': 'hello'}

Code language: Python [python]

Đầu ra hiển thị hai đối tượng

{'id': 1, 'message': 'hello'}

Code language: Python [python]
9

Tóm lại, nếu bạn gán một thuộc tính không tồn tại trên đối tượng

{'id': 1, 'message': 'hello'}

Code language: Python [python]
9, Python sẽ trả về một đối tượng giả mới. Do tính năng động này, bạn có thể sử dụng lớp

{'id': 1, 'message': 'hello'}

Code language: Python [python]
9 để chế nhạo bất kỳ đối tượng nào bạn muốn

Khi nào nên sử dụng mô phỏng

Đây là những trường hợp mà bạn có thể cân nhắc sử dụng giả

  • cuộc gọi hệ thống
  • mạng
  • thao tác vào/ra
  • Đồng hồ và thời gian, múi giờ
  • Hoặc các trường hợp khác mà kết quả không thể đoán trước

Tại sao sử dụng giả

Sau đây là những lợi ích của giả

  • Tăng tốc độ kiểm tra
  • Loại trừ dư thừa bên ngoài
  • Làm cho kết quả không thể đoán trước có thể dự đoán được

Ví dụ về Python Unittest Mock

Giả sử bạn có một mô-đun tên là

mock = Mock[]

Code language: Python [python]
5

from random import randint def speed[]: return randint[40, 120] def alert[]: s = speed[] if s < 60 or s > 100: return True return False

Code language: Python [python]

trong cảm biến. mô-đun py

  • mock = Mock[]

    Code language: Python [python]
    6 trả về tốc độ hiện tại của xe. Nó trả về một giá trị ngẫu nhiên trong khoảng từ 40 đến 120. Trong thế giới thực, chức năng này sẽ đọc dữ liệu từ đồng hồ đo quãng đường
  • Hàm

    mock = Mock[]

    Code language: Python [python]
    7 trả về true nếu tốc độ hiện tại thấp hơn 60 km/ và cao hơn 120 km/h. Hàm

    mock = Mock[]

    Code language: Python [python]
    7 sử dụng hàm

    mock = Mock[]

    Code language: Python [python]
    6 để lấy tốc độ hiện tại

Sẽ khó kiểm tra hàm

mock.api.return_value = { 'id': 1, 'message': 'hello' }

Code language: Python [python]
0 vì giá trị được trả về bởi hàm

mock = Mock[]

Code language: Python [python]
6 rất đa dạng. Để giải quyết nó, bạn có thể sử dụng lớp

{'id': 1, 'message': 'hello'}

Code language: Python [python]
9

Phần sau đây tạo mô-đun thử nghiệm

mock.api.return_value = { 'id': 1, 'message': 'hello' }

Code language: Python [python]
3 để kiểm tra chức năng

mock.api.return_value = { 'id': 1, 'message': 'hello' }

Code language: Python [python]
0

test_alert_normal [test_odometer.TestOdometer] .. ok ---------------------------------------------------------------------- Ran 1 test in 0.000s OK

Code language: Python [python]

Làm thế nào nó hoạt động

Đầu tiên, gán một đối tượng Mock cho hàm

mock.api.return_value = { 'id': 1, 'message': 'hello' }

Code language: Python [python]
5

{'id': 1, 'message': 'hello'}

Code language: Python [python]
0

Thứ hai, đặt giá trị trả về của hàm

mock = Mock[]

Code language: Python [python]
6 thành 70

{'id': 1, 'message': 'hello'}

Code language: Python [python]
1

Thứ ba, gọi hàm

mock = Mock[]

Code language: Python [python]
7 và kiểm tra xem nó có trả về Sai không. Hàm

mock = Mock[]

Code language: Python [python]
7 sẽ gọi đối tượng giả thay vì hàm thực tế

mock = Mock[]

Code language: Python [python]
6

Phương pháp giả hoạt động như thế nào?

mock[] với câu trả lời. Nó được sử dụng để tạo các đối tượng giả của một lớp hoặc giao diện với một thủ tục cụ thể . Đây là một phương pháp mô phỏng nâng cao, có thể được sử dụng khi làm việc với các hệ thống cũ. Nó lấy Trả lời làm tham số cùng với tên lớp hoặc giao diện.

Điều gì là đúng về chế nhạo trong Python?

Mocking chỉ đơn giản là hành động thay thế một phần của ứng dụng mà bạn đang thử nghiệm bằng một phiên bản giả của phần đó được gọi là giả. Thay vì gọi triển khai thực tế, bạn sẽ gọi mô hình và sau đó đưa ra các xác nhận về những gì bạn mong đợi sẽ xảy ra

Mục đích của một đối tượng giả là gì?

Việc sử dụng các đối tượng giả định cho phép các nhà phát triển tập trung kiểm tra hành vi của hệ thống đang được kiểm tra mà không phải lo lắng về các thành phần phụ thuộc của hệ thống . Ví dụ: kiểm tra một thuật toán phức tạp dựa trên nhiều đối tượng ở các trạng thái cụ thể có thể được thể hiện rõ ràng bằng cách sử dụng các đối tượng giả thay cho các đối tượng thực.

Chủ Đề