簡體   English   中英

如何用模擬對象替換函數以在Python中進行單元測試

[英]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

看到這個很好的解釋

使用unittest.mock.patch

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM