如何解决结合模拟和 getattr
我想制作一个适合我们团队测试的模拟对象。
然而,默认的 getattr 行为不是我想要的。请参阅下面的示例。
import mock
class A(mock.MagicMock):
pass
a = A()
print(a.something) # got a MagicMock without error
print(getattr(a,"something",False)) # False expected,but got a mock object
我试图覆盖 __getattr__ 方法
import mock
class A(mock.MagicMock):
def __getattr__(self,name):
try:
return object.__getattribute__(self,name)
except:
return mock.MagicMock.__getattribute__(self,name)
a = A()
print(getattr(a,False)) # got a False value
print(a.something) # got attribute error
我不允许更改源代码中的“getattr(...)”。
编辑:
The test flow may look like this
import mock
class A:
def foo(self):
# the "something" may not be initiated,# and I want it to be 1 rather then a mock object
stat = getattr(self,1)
stat *= 100
# the client is valid only when a client connected,# I want to mock it because this is a offline test.
# Since there all many attributes like "client",# I don't want to overwrite every one in the MockA class
self.client.call("done")
return stat
class MockA(A,mock.MagicMock):
pass
def test_foo():
a = MockA()
assert a.foo() == 100
a.something = 4
assert a.foo() == 400
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。