模拟与猴子修补

时间:2018-11-01 04:53:43

标签: python mocking

相对于猴子补丁,我还是不是100%清楚的嘲笑/短截? 对于python,为什么我们不总是只猴子补丁?
下面的例子
a) mockBinanceConn 是一个魔术模拟-返回值存根(我们可以只猴子打补丁而不使用模拟)
b)下面的 analyticService.triggerCalculator 是猴子补丁,使用简单的lambda即可很方便

问题是,为什么我们不总是猴子补丁?在下面的示例中,我可以看到使用模拟的一个优势-您不需要构造“ 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()

0 个答案:

没有答案