python - 模拟与猴子修补
问题描述
我仍然不是 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()
解决方案
推荐阅读
- javascript - 如何从文本文件中提取语言列表?
- python-3.x - Mac:为 xmlsec 构建轮子失败
- python - 如果有 2 个脏话,我怎样才能让我的聊天过滤器发送一个嵌入?
- django - Django 媒体播放无法在中间或选定时间播放视频
- powershell - 停止时使用 FtpWebRequest 超时 FTP 上传
- python-3.x - 以循环方式生成列表的子集
- javascript - Firebase 模拟器验证测试 - 使用 initializeAdminApp 时间戳时出错
- azure - 无法成功将参数传递给链接的 ARM 模板
- python-3.x - 在没有pylint抱怨的情况下向覆盖的函数添加额外的参数
- sql - add_months 的替代方案