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
7. Mô-đunCode language: Python [python]
{'id': 1, 'message': 'hello'}
7 cung cấp lớpCode language: Python [python]
{'id': 1, 'message': 'hello'}
9 cho phép bạn mô phỏng các đối tượng khácCode language: Python [python]
{'id': 1, 'message': 'hello'}
Nó cũng cung cấp lớp
0 là lớp con của lớpCode language: Python [python]
from unittest.mock import Mock
9. Bên cạnh các phương thức và thuộc tính của lớpCode language: Python [python]
{'id': 1, 'message': 'hello'}
9, lớpCode language: Python [python]
{'id': 1, 'message': 'hello'}
0 có các triển khai của tất cả các phương thức dunder e. g. , __str__ và __repr__Code language: Python [python]
from unittest.mock import Mock
Xem ví dụ sau
Code language: Python [python]
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[]]
đầu ra
Code language: Python [python]
{'id': 1, 'message': 'hello'}
Làm thế nào nó hoạt động
Đầu tiên, nhập lớp
9 từ mô-đunCode language: Python [python]
{'id': 1, 'message': 'hello'}
7
{'id': 1, 'message': 'hello'}
Code language: Python [python]
Code language: Python [python]
from unittest.mock import Mock
Thứ hai, tạo một thể hiện mới của lớp
9Code language: Python [python]
{'id': 1, 'message': 'hello'}
Code language: Python [python]
mock = Mock[]
Thứ ba, giả lập hàm
7 và gán giá trị trả về của nó cho một từ điểnCode language: Python [python]
from unittest.mock import Mock
Code language: Python [python]
mock.api.return_value = { 'id': 1, 'message': 'hello' }
Cuối cùng, gọi
7 từ đối tượng giả. Nó sẽ trả về giá trị được gánCode language: Python [python]
from unittest.mock import Mock
Code language: Python [python]
print[mock.api[]]
Trong ví dụ này, chúng ta có hai đối tượng giả.
9 &Code language: Python [python]
from unittest.mock import Mock
0Code language: Python [python]
mock = Mock[]
Hãy thêm câu lệnh
1 vào chương trình để xem nó hoạt động như thế nàoCode language: Python [python]
mock = Mock[]
Code language: Python [python]
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[]]
đầu ra
Code language: Python [python]
{'id': 1, 'message': 'hello'}
Đầu ra hiển thị hai đối tượng
9Code language: Python [python]
{'id': 1, 'message': 'hello'}
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
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ớpCode language: Python [python]
{'id': 1, 'message': 'hello'}
9 để chế nhạo bất kỳ đối tượng nào bạn muốnCode language: Python [python]
{'id': 1, 'message': 'hello'}
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à
5Code language: Python [python]
mock = Mock[]
Code language: Python [python]
from random import randint def speed[]: return randint[40, 120] def alert[]: s = speed[] if s < 60 or s > 100: return True return False
trong cảm biến. mô-đun py
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
Code language: Python [python]mock = Mock[]
- Hàm
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
Code language: Python [python]mock = Mock[]
7 sử dụng hàm
Code language: Python [python]mock = Mock[]
6 để lấy tốc độ hiện tại
Code language: Python [python]mock = Mock[]
Sẽ khó kiểm tra hàm
0 vì giá trị được trả về bởi hàm
mock.api.return_value = { 'id': 1, 'message': 'hello' }
Code language: Python [python]
6 rất đa dạng. Để giải quyết nó, bạn có thể sử dụng lớpCode language: Python [python]
mock = Mock[]
9Code language: Python [python]
{'id': 1, 'message': 'hello'}
Phần sau đây tạo mô-đun thử nghiệm
3 để kiểm tra chức năngCode language: Python [python]
mock.api.return_value = { 'id': 1, 'message': 'hello' }
0Code language: Python [python]
mock.api.return_value = { 'id': 1, 'message': 'hello' }
Code language: Python [python]
test_alert_normal [test_odometer.TestOdometer] .. ok ---------------------------------------------------------------------- Ran 1 test in 0.000s OK
Làm thế nào nó hoạt động
Đầu tiên, gán một đối tượng Mock cho hàm
5Code language: Python [python]
mock.api.return_value = { 'id': 1, 'message': 'hello' }
0Code language: Python [python]
{'id': 1, 'message': 'hello'}
Thứ hai, đặt giá trị trả về của hàm
6 thành 70Code language: Python [python]
mock = Mock[]
1Code language: Python [python]
{'id': 1, 'message': 'hello'}
Thứ ba, gọi hàm
7 và kiểm tra xem nó có trả về Sai không. HàmCode language: Python [python]
mock = Mock[]
7 sẽ gọi đối tượng giả thay vì hàm thực tếCode language: Python [python]
mock = Mock[]
6Code language: Python [python]
mock = Mock[]