背景: 我需要用
callproc
变量模拟 Oracle OUT
。
所以我需要修改给予模拟函数的参数之一。
并且它不会改变给定参数的值。
我认为 Mock 确实会复制参数,因此原始变量值无法更改。 我在文档中找不到有关此问题的任何内容,可能是因为我正在寻找错误的东西。
但是 还有其他办法吗...?
我写了一个非常简单的测试来玩,但失败了:
from unittest.mock import MagicMock
def simple_callproc(bla):
bla += 1
def test_very_simple_mock_modifies_args():
m = MagicMock()
m.callproc.side_effect = simple_callproc
nix = 1
m.callproc(nix)
m.callproc.assert_called()
m.callproc.assert_called_with(nix)
assert nix == 2, "Not modified"
问题是整数不可变,意味着如果您无法使用其他方法更新它们,因此不要使用一个整数,而是使用整数列表,就像这样
from unittest.mock import MagicMock
def simple_callproc(bla):
bla[0] += 1
def test_very_simple_mock_modifies_args():
m = MagicMock()
m.callproc.side_effect = simple_callproc
nix = [1]
m.callproc(nix)
m.callproc.assert_called()
m.callproc.assert_called_with(nix)
assert nix[0] == 2, "Not modified"