我有以下课程:
class A(object):
def __init__(self):
self.inner_class = B()
def foo():
self.inner_class.bar()
class B(object):
def bar():
return 'No'
class C(object):
def bar():
return 'Yes'
我想模拟这样,而不是调用B的构造函数,而是得到一个C对象。
@patch(...something....)
def test_get_yes(self):
A().foo() # Expected output is 'Yes'
我该怎么办?
我知道我可以编写以下测试,但我不愿意:
def test_get_yes(self):
a = A()
a.inner_class = C()
a.foo() # Expected output is 'Yes'
答案 0 :(得分:1)
您需要模拟的是B
中A.__init__.__globals__
的条目。
假设一组类定义与您的问题中出现的稍有不同:
class A(object):
def __init__(self):
self.inner_class = B()
def foo(self):
return self.inner_class.bar()
class B(object):
def bar(self):
return 'No'
class C(object):
def bar(self):
return 'Yes'
然后以下应该起作用:
@patch.dict(A.__init__.__globals__, {'B': C})
def test_get_yes():
print(A().foo())
test_get_yes() # Outputs yes, not no