首页 > 解决方案 > 模拟与猴子修补

问题描述

我仍然不是 100% 清楚的模拟/存根与简单的猴子修补?对于 python,为什么我们不总是只使用猴子补丁?
下面的示例
a)mockBinanceConn是一个神奇的模拟 - 返回值存根(我们可以只使用猴子补丁而不是使用模拟)
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()

标签: pythonmocking

解决方案


推荐阅读