![](/img/trans.png)
[英]python patch with side_effect on Object's method is not called with self
[英]How to patch an object's attributes with `side_effect`
所以我有一個文件some_class.py
:
class SomeReader:
def read_path(self, url):
return "read_path"
class SomeClass:
def __init__(self, url):
self.reader = SomeReader(url)
print(self.reader.read_path(""))
還有一個測試文件some_class_test.py
:
from some_class import SomeClass, SomeReader
@patch("some_class.SomeReader")
def test_some_class(mock_some_reader):
def mock_read_path(url):
return "mock_read_path"
mock_some_reader.read_path.side_effect = mock_read_path
SomeClass("")
我期望當我運行這個測試時,它會打印mock_read_path
而是打印<MagicMock name='SomeReader().read_path()' id='140701381288480'>
。 我該如何解決? 我想模擬 SomeReader 的SomeReader
初始化,因此我使用@patch("some_class.SomeReader")
。 但我也想模擬read_path
的 read_path SomeReader
,因此我有mock_some_reader.read_path.side_effect = mock_read_path
但這似乎不起作用。
您正在做的是模擬 class 本身,而不是類的實例。 模擬替換調用以實例化SomeReader(url)
(基本上替換類的__init__
方法)。
然后你要做的是模擬SomeReader(url)
創建的假實例的返回值
@patch("some_class.SomeReader")
def test_some_class(mock_some_reader):
def mock_read_path(url):
return "mock_read_path"
mock_some_reader.return_value.read_path.side_effect = mock_read_path
SomeClass("")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.