Python单元测试-模拟类属性

时间:2018-12-19 16:16:49

标签: python unit-testing

我来自Java背景并且是python的新手。在Java中,如果类像这样初始化其自己的属性(这对单元测试不利):

Functor

我将对其进行重构,以便可以提供模拟的依赖项并测试类,而无需创建Logger的真实实例:

class TestMe {
    Logger logger;
    public TestMe() {
        this.logger = new Logger();
    }

    //...stuff
}

但是python是一种非常不同的语言,也许有一种无需重构就可以模拟该属性的方法:

class TestMe {
    Logger logger;
    public TestMe(ILogger logger) {
        this.logger = logger;
    }

    //...stuff
}

有没有一种方法可以在上面的python类中模拟Logger而不进行重构?

1 个答案:

答案 0 :(得分:0)

是的,有。您只需将logger成员变量重新分配为您想要的任何变量即可。请注意,Python中没有私有和公共的概念,因此您可以这样做。

尤其是,您可以将其分配为MockMagicMock对象,这些对象是可以对其进行自省的特殊对象(例如确保已调用/使用了self.logger以及一种“伪造”的干净方法(您无需实现Logger的接口即可使用它们)

from unittest.mock import MagicMock
t = TestMe()
t.logger = MagicMock()
# run some tests that use t (and maybe the Logger)

您可以阅读有关Python here中的模拟的更多信息。

HTH。