我有一行代码是:
if not hasattr(class.a, u'c'):
return
我该如何模拟类,以便class.a.c为hasattr返回False?
如果我这样做:
>>> from mock import MagicMock
>>> mock_class = MagicMock(spec=[u'a'])
>>> hasattr(mock_class, u'a')
True
>>> hasattr(mock_class, u'b')
False
>>> hasattr(mock_class.a, u'c')
True
虽然我不指定class.a.c,但它被 mock 了!!!
最佳答案
实际上mock_class.a
将创建另一个没有规范的MagicMock。我能想到的唯一方法是,将a
的mock_class
属性分配给另一个带有spec的MagicMock,如下所示:
mock_class = MagicMock(spec=[u'a'])
mock_class.a = MagicMock(spec=[u'a'])
hasattr(mock_class.a, u'c') # returns False
另外,如果您要模拟一些真实的对象,则可以执行recursive autospecing。