[英]Python unit test - Mocking a class property
我来自Java背景并且是python的新手。 在Java中,如果类像这样初始化其自己的属性(这对单元测试不利):
class TestMe {
Logger logger;
public TestMe() {
this.logger = new Logger();
}
//...stuff
}
我将对其进行重构,以便可以提供模拟的依赖关系并测试类,而无需创建Logger的真实实例:
class TestMe {
Logger logger;
public TestMe(ILogger logger) {
this.logger = logger;
}
//...stuff
}
但是python是一种非常不同的语言,可能有一种无需重构即可模拟该属性的方法:
import Logger
class TestMe:
def __init__(self):
self.logger = Logger()
# stuff
有没有一种方法可以在上面的python类中模拟Logger而无需重构?
就在这里。 您只需将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)
HTH。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.