我来自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而不进行重构?
答案 0 :(得分:0)
是的,有。您只需将logger成员变量重新分配为您想要的任何变量即可。请注意,Python中没有私有和公共的概念,因此您可以这样做。
尤其是,您可以将其分配为Mock
或MagicMock
对象,这些对象是可以对其进行自省的特殊对象(例如确保已调用/使用了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。