,你可以在這裏做的兩件事情,最簡單的它只是修補Pyro4.Proxy,像這個:
from unittest.mock import patch
# or from mock import create_autospec if you are in py2
class TestA(TestCase):
@patch('Pyro4.Proxy', autospec=True)
def test_method(self):
temp_A = A()
temp_A.method_1()
訣竅是修補「正確的對象」,並沒有實例化類,直到你補丁(在你的測試函數中),Pyro4.Proxy
是我可以從你的代碼推導出來的最好的對象,但是如果你的class A
在my_module中,也許最好的補丁對象是my_module.Pyro4.Proxy
。
你可能想要的另一件事就是嘲笑var變量。那麼你定義self.var
的__init__
方法中假設你不想嘲笑整個__init__
方法,那麼你可以
from unittest.mock import create_autospec
# or from mock import create_autospec if you are in py2
class TestA(TestCase):
def setUp(self):
self.temp_A = classA()
self.temp_A.var = create_autospec(Pyro4.Proxy)(None)
def test_method(self):
self.temp_A.method_1()
,如果你可以重構你的類一點,我建議使VAR,方便的特性嘲諷
class A(object):
def __init__(self):
...
@property
def var(self):
return Pyro4.Proxy(self.ns.lookup(temp_name))
def method_1(self):
.....
,然後你的測試類可以
from unittest.mock import create_autospec, PropertyMock
class TestA(TestCase):
def setUp(self):
self.temp_A = classA()
type(self.temp_A).var = PropertyMock(side_effect=lambda *x, **y: create_autospec(Pyro4.Proxy)(*x, **y))
def test_method(self):
self.temp_A.method_1()