问题在于单元测试。 我创建了一个我正在测试的类的实例,并尝试测试其中一个方法。该方法使用从单独模块中定义的不同类获取的数据。我要模仿那个模块。 我如何访问我的实例的名称空间 - 我必须在运行我正在测试的方法之前执行它,以模拟模块,其中包含我的方法从中获取数据的类的定义?
答案 0 :(得分:2)
我将在这里创建一个例子,我认为这与你想要做的事情相似。
假设您有一些我们称之为Data
的课程,该课程在模块foo
中定义。 foo
模块导入bar
,foo.Data
调用bar.get_data()
方法填充自己。
您想创建一个模块test
,它将创建foo.Data
的实例,但您不希望使用实际模块bar
,而是希望该实例使用此模拟版本。
您可以通过从测试模块导入foo
来设置此项,然后将foo.bar
重新绑定到您模拟的模块版本。
以下是一个示例:
bar.py:
def get_data():
return 'bar'
foo.py:
import bar
class Data(object):
def __init__(self):
self.val = bar.get_data()
if __name__ == '__main__':
d = Data()
print d.val # prints 'bar'
test.py:
import foo
class bar_mock(object):
@staticmethod
def get_data():
return 'test'
if __name__ == '__main__':
foo.bar = bar_mock
d = foo.Data()
print d.val # prints 'test'
虽然这样可以让您了解一个简单的测试用例,但最好还是选择一个模拟库来为您处理这个问题。