0

问题是在单元测试的背景下。我已经创建了我正在测试的类的一个实例,并尝试测试它的一种方法。该方法使用从单独模块中定义的不同类获取的数据。我要模拟那个模块。如何访问我的实例的名称空间 - 我必须在运行我正在测试的方法之前这样做,以模拟包含我的方法从中获取数据的类的定义的模块?

4

1 回答 1

2

我将在这里创建一个示例,我认为它与您正在尝试做的事情相似。

假设您有一些我们将Data在模块中定义的类foofoo模块导入和调用bar方法来填充自身。foo.Databar.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 回答