![](/img/trans.png)
[英]How to mock a class method that is called from another class with pytest_mock
[英]How to mock a class methods that return another class objects with pytest?
我有一個具有多種方法的ClassA
,其中一種方法返回ClassB
的 object ,其中 class B 有自己的方法
我的文件1.py:
from b import ClassB
class ClassA(object):
def method_1(self):
f = ClassB()
return f.method_a()
def method_2(self):
...
return ...
def method_n(self):
...
return ...
我的文件2.py:
class ClassB(object):
def __init__(self):
self.var1 = "something"
def method_a(self):
return self.var1
def method_b(self):
return ...
...
def method_z(self):
return ...
在測試 function 中,我試圖模擬所有ClassA
方法的返回值,包括啟動ClassB
的method_1
。
我的文件3.py:
from myfile1 import ClassA
class ClassC(object):
def __init__(self):
self.a = ClassA()
有人可以解釋一下修補和模擬 Class A 和 B 的正確方法是什么嗎?
如果我們想模擬從method_1
到method_n
從ClassA
返回值的每個方法,並使模擬值可被其他測試函數重用,那么正確的方法是什么,因為下面的方法會使測試 function 太長且不可重用:
@patch("myfile3.ClassA")
def test1(mock_class_a):
mock_class_a().method_1.return_value = "abc"
創建一堆模擬類並使用它們
#./something/__init__.py
class X:
def get_class_thing(self):
return "not abc"
#./tests/tests.py
from unittest.mock import Mock,patch
class MyMock:
get_class_thing = Mock(return_value="abc")
method_2 = Mock(return_value="abc")
@patch('something.X',return_value=MyMock)
def test_it(patched):
from something import X
assert X().get_class_thing() == "abc"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.