模仿vs猴子修补

2024-05-23 14:57:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我仍然不是100%明确的嘲笑/树桩vs简单的猴子修补? 对于python,为什么我们不总是只猴子补丁呢?
以下示例
a) mockBinanceConn是一个神奇的mock-返回值存根(我们可以用monkey-patch代替mock)
b) analyticService.triggerCalculator下面是猴子补丁,使用简单的lambda非常方便

问题是,为什么我们不总是猴子补丁?对于下面的例子,我可以看到mock的一个优点-您不需要构造“mockBinanceConn”。在

@patch('Market.Crypto.binance.BinanceConnector')
def testAnalyticService_RunAlgo_BACKTEST(self, mockBinanceConn):
    mockBinanceConn.getTrades.return_value = self.dummyTrades
    mockBinanceConn.getOrderBook.return_value = self.dummyOrderBook
    self.mktService.marketConn[mktAccess.MarketAccessService.PROVIDER_BINANCE] = mockBinanceConn

    strategies = self.dao.getStrategies()
    self.mktService.reloadMarketData(strategies)

    # monkey patch analyticService to speed up test (We're not testing Algo here)
    dummyTriggerCalculator = lambda mode, cob, strategyId, instrumentId, testId : 1
    self.analyticService.triggerCalculator = dummyTriggerCalculator

    self.analyticService=.calcPnl()

Tags: lambdaself示例returnvaluemock树桩monkey