[英]How to replace function with mock object for unittesting in Python
如何用Python中的模擬對象替換對函數的所有引用?
我正在嘗試為Fabric腳本編寫一些單元測試。 具體來說,我想用記錄命令而不是執行命令的模擬版本替換fabric.api.run
。 但是,我想以某種方式執行此操作,因此不必重寫所有引用架構的代碼。
我試着做:
import fabric.api
_run = fabric.api.run
fabric.api.run = my_mock_run_function
但是由於我不能保證它會在其他模塊導入fabric.api之前運行,因此許多代碼仍在使用實際run
功能。
如果您的代碼使用:
from fabric.api import run
您將必須修補模塊對運行功能具有的本地引用:
@patch('yourmodule.run')
def test_method(self, run):
pass
如果您的代碼使用:
import fabric.api
...
api.run(...)
您將可以修補原始副本:
@patch('fabric.api.run')
def test_method(self, run):
pass
看到這個很好的解釋 。
import fabric.api
import unittest
from unittest.mock import Mock, patch
class TestCases(unittest.TestCase):
@patch('fabric.api.run')
def test_test(self):
self.assertTrue(True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.