[英]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.