簡體   English   中英

Python單元測試-模擬類屬性

[英]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中沒有私有和公共的概念,因此您可以執行此操作。

特別是,您可以將其分配為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中的模擬的信息

HTH。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM