我试图在创建示例对象test_obj
时模仿类Bar
的属性。该属性是另一个名为Foo
的类的示例。
然后,我想测试Bar
类中的bar
方法,该方法调用Foo
类的search
方法。
我有这个error: AttributeError: 'str' object has no attribute 'search'
。我知道这可能是因为我用MockedFoo
作为str来嘲笑Bar
类的foo
属性。
我的问题是:如何更改模拟,以便可以通过Bar
类的foo
对象访问Foo
类的方法?search
方法还必须返回一个列表(我可以这样做),但我无法首先访问此方法。
下面是我的代码:
import unittest
from mock import patch
class Foo(object):
def __init__(self):
self.foo = 'foo'
def search(self):
# do something
class Bar(object):
def __init__(self):
self.id = "123"
self.name = "abc"
self.foo = Foo()
def bar(self):
return self.foo.search()
def test_bar():
# initialization of Bar object
with mock.patch('lib.lib_foo.Foo', return_value="MockedFoo")
test_obj = Bar()
test_obj.bar()
我读了一个similar issue,但那是为了访问字段。我无法调整我的代码来访问方法。
1条答案
按热度按时间oxf4rvwz1#
我已经修改了
test_bar()
方法中的指令with mock.patch('lib.lib_foo.Foo', return_value="MockedFoo")
,并且设置了一个列表作为所创建的模拟对象的search
方法的返回值。下面是我的代码:
注意,
test_obj
对象是在上下文管理器with ...
之前创建的。