如何检查传递给模拟对象方法的参数
How to check arguments passed to a method of a mocked object
我正在尝试使用 unittest.mock.MagicMock
来模拟 API。我不明白如何检查传递给模拟对象上的方法的参数。我认为这应该有效:
from unittest import mock
import unittest
class TestMock(unittest.TestCase):
def setUp(self):
pass
def test_basic(self):
obj = unittest.mock.MagicMock()
obj.update(1,2,a=3)
print("obj.update: ", obj.update)
print("obj.update.call_args: ", obj.update.call_args)
print("obj.update.call_args.args: ", obj.update.call_args.args)
self.assertEqual((1,2), obj.update.call_args.args)
但是,pytest test_mock.py
失败了:
test_mock.py:17: AssertionError
------------------------------------------------ Captured stdout call ------------------------------------------------
obj.update: <MagicMock name='mock.update' id='140707024533072'>
obj.update.call_args: call(1, 2, a=3)
obj.update.call_args.args: args
============================================== short test summary info ===============================================
FAILED test_mock.py::TestMock::test_basic - AssertionError: (1, 2) != args
================================================= 1 failed in 0.10s ==================================================
The docs 说我应该能够通过 call_args.args
访问位置参数,但这似乎是在创建一个模拟字段。验证参数的正确方法是什么?
args
和 kwargs
值在 Python 3.8 中引入。使用 Python 3.7 或更早版本时会出现此行为。
我正在尝试使用 unittest.mock.MagicMock
来模拟 API。我不明白如何检查传递给模拟对象上的方法的参数。我认为这应该有效:
from unittest import mock
import unittest
class TestMock(unittest.TestCase):
def setUp(self):
pass
def test_basic(self):
obj = unittest.mock.MagicMock()
obj.update(1,2,a=3)
print("obj.update: ", obj.update)
print("obj.update.call_args: ", obj.update.call_args)
print("obj.update.call_args.args: ", obj.update.call_args.args)
self.assertEqual((1,2), obj.update.call_args.args)
但是,pytest test_mock.py
失败了:
test_mock.py:17: AssertionError
------------------------------------------------ Captured stdout call ------------------------------------------------
obj.update: <MagicMock name='mock.update' id='140707024533072'>
obj.update.call_args: call(1, 2, a=3)
obj.update.call_args.args: args
============================================== short test summary info ===============================================
FAILED test_mock.py::TestMock::test_basic - AssertionError: (1, 2) != args
================================================= 1 failed in 0.10s ==================================================
The docs 说我应该能够通过 call_args.args
访问位置参数,但这似乎是在创建一个模拟字段。验证参数的正确方法是什么?
args
和 kwargs
值在 Python 3.8 中引入。使用 Python 3.7 或更早版本时会出现此行为。