Python3 单元测试中的 Proxyquire 等价物

Proxyquire equivalent in Python3 unittest

我正在测试一个看起来像这样的脚本:

import arcpy

Class A:
    function go(x, y, z):
        arcpy.dothing(y,x,z['attr'])

我想在 python 3.6.6 中编写单元测试,传入虚拟参数并验证它们是否正确转换并传递给 arcpy.dothing 方法。为此,我在节点中使用了 proxyquire,但在 python 中我无法弄清楚。特别是 @patch 似乎不允许捕获输入参数。

经过大量试验,我发现了这一点。这是我最终得到的结果:

import unittest
from a import A
from unittest.mock import patch

class Test_ATest(unittest.TestCase):   
    @patch('a.arcpy.dothing')
    def test_dothing(self, dothing):
        d = {"attr": "c"}
        obj = A()
        obj._go(1,2,d)

        dothing.assert_called_with(2,1,'c')