问题是在单元测试的背景下。我已经创建了我正在测试的类的一个实例,并尝试测试它的一种方法。该方法使用从单独模块中定义的不同类获取的数据。我要模拟那个模块。如何访问我的实例的名称空间 - 我必须在运行我正在测试的方法之前这样做,以模拟包含我的方法从中获取数据的类的定义的模块?
问问题
274 次
1 回答
2
我将在这里创建一个示例,我认为它与您正在尝试做的事情相似。
假设您有一些我们将Data
在模块中定义的类foo
。foo
模块导入和调用bar
方法来填充自身。foo.Data
bar.get_data()
您想要创建一个test
将创建 的实例的模块foo.Data
,但不是使用实际模块,而是bar
希望该实例使用 this 的模拟版本。
您可以通过从您的测试模块导入来设置它foo
,然后重新绑定foo.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'
测试.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'
尽管这可以让您完成一个简单的测试用例,但您最好还是研究一个模拟库来为您处理这个问题。
于 2012-10-03T17:44:09.160 回答