Giả sử rằng chúng tôi có một hệ thống mô-đun chỉ tồn tại trên giai đoạn sản xuất. Tại thời điểm thử nghiệm các mô-đun này không tồn tại. Nhưng tôi vẫn muốn viết các bài kiểm tra cho mã sử dụng các mô-đun đó. Cũng giả sử rằng tôi biết làm thế nào để giả lập tất cả các đối tượng cần thiết từ các mô-đun đó. Câu hỏi đặt ra là: làm cách nào để tôi thuận tiện thêm phân đoạn mô-đun vào hệ thống phân cấp hiện tại?Làm cách nào để giả lập cấu trúc phân cấp của các mô-đun không tồn tại?
Đây là một ví dụ nhỏ. Chức năng Tôi muốn thử nghiệm được đặt trong một tập tin gọi là actual.py
:
actual.py:
def coolfunc():
from level1.level2.level3_1 import thing1
from level1.level2.level3_2 import thing2
do_something(thing1)
do_something_else(thing2)
Trong bộ kiểm tra của tôi, tôi đã có tất cả mọi thứ tôi cần: Tôi có thing1_mock
và thing2_mock
. Ngoài ra tôi có một chức năng kiểm tra. Những gì tôi cần là để thêm level1.level2...
vào hệ thống mô-đun hiện tại. Như thế này:
tests.py
import sys
import actual
class SomeTestCase(TestCase):
thing1_mock = mock1()
thing2_mock = mock2()
def setUp(self):
sys.modules['level1'] = what should I do here?
@patch('level1.level2.level3_1.thing1', thing1_mock)
@patch('level1.level2.level3_1.thing1', thing2_mock)
def test_some_case(self):
actual.coolfunc()
Tôi biết rằng tôi có thể thay thế sys.modules['level1']
bằng một đối tượng có chứa một đối tượng khác, v.v. Nhưng có vẻ như rất nhiều mã cho tôi. Tôi cho rằng phải có nhiều giải pháp đơn giản hơn và đẹp hơn. Tôi không thể tìm thấy nó.