Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python unittest.mock.ANY赢得';不匹配MagicMock_Python_Jenkins_Mocking_Python Unittest - Fatal编程技术网

Python unittest.mock.ANY赢得';不匹配MagicMock

Python unittest.mock.ANY赢得';不匹配MagicMock,python,jenkins,mocking,python-unittest,Python,Jenkins,Mocking,Python Unittest,我有一些单元测试使用sqlalchemy覆盖了数据库中的包装类: exe_mock = self.database.connection.execute self.database.select() exe_mock.assert_called_once_with(ANY) self.assertIn("name='table.select().where()'", repr(exe_mock.call_args[0][0])) 我在本地运行测试,一切正常。但Jenkins进行了同样的测试,结

我有一些单元测试使用sqlalchemy覆盖了数据库中的包装类:

exe_mock = self.database.connection.execute
self.database.select()
exe_mock.assert_called_once_with(ANY)
self.assertIn("name='table.select().where()'", repr(exe_mock.call_args[0][0]))
我在本地运行测试,一切正常。但Jenkins进行了同样的测试,结果是:

Traceback (most recent call last):
  File "/var/lib/jenkins/workspace/project-develop/tests/test_persistence.py", line 37, in test_select
    exe_mock.assert_called_once_with(ANY)
  File "/usr/lib64/python3.5/unittest/mock.py", line 803, in assert_called_once_with
    return self.assert_called_with(*args, **kwargs)
  File "/usr/lib64/python3.5/unittest/mock.py", line 792, in assert_called_with
    raise AssertionError(_error_message()) from cause
AssertionError: Expected call: execute(<ANY>)
Actual call: execute(<MagicMock name='table.select().where()' id='140334112380240'>)
更新2

事实证明,问题并不是在virtualenv中本地化的,而是在python安装中

从unittest.mock import MagicMock,ANY;f=MagicMock();f(MagicMock());f.assert_called_once_with(ANY);“运行
python34-c”将正常工作

从unittest.mock import MagicMock,ANY;f=MagicMock();f(MagicMock());f.assert_调用一次(ANY);“
将引发异常

更新3

使用
pdb
,我可以看到失败点是
((ANY,),{})!=调用(MagicMock())
,该调用应返回
False
,但返回
True

奇怪的是,
((ANY,),{})=call(MagicMock())
也返回
True

远程:

>>> pdb.run('((ANY,), {}) != c')
> <string>(1)<module>()->None
(Pdb) s
--Return--
> <string>(1)<module>()->None
>>pdb.run('((ANY,),{})!=c')
>(1)无
(Pdb)s
--返回--
>(1)无
本地:

>>> pdb.run('((ANY,), {}) != c')
> <string>(1)<module>()->None
(Pdb) s
--Call--
> /usr/lib/python3.5/unittest/mock.py(1981)__eq__()
-> def __eq__(self, other):
>>pdb.run('((ANY,),{})!=c')
>(1)无
(Pdb)s
--召唤--
>/usr/lib/python3.5/unittest/mock.py(1981)
->定义(自身、其他):

我要结束我自己的问题,因为Python安装似乎已经损坏了。我不能在其他机器上复制它。奇怪的是,它对我来说也不匹配
MagicMock
。你后来发现这个问题了吗?运行此代码时使用的Python版本是什么?@duckenmaster我想我使用的是CPython 3.5。我无法解决它,IIRC我只是换了另一个版本,或者用核武器炸了Jenkins虚拟机,然后做了一个新的。从我的更新2中,你可以看到3.4是有效的,所以我可能使用了它。对我来说,
ANY
将包含大量的参数,但它只匹配一个参数,这是错误的假设。因此
foo(a,b)
foo.assert\u called\u once\u with(ANY,ANY)
将通过,但
foo.assert\u called\u once\u with(ANY)
不会通过。当然,这些知识对您帮助不大,因为MagicMock()应该只是
f(MagicMock())
中的一个参数;因此,
f.assert\u与(ANY)
一起调用了\u once\u,应该通过该规则。
>>> pdb.run('((ANY,), {}) != c')
> <string>(1)<module>()->None
(Pdb) s
--Call--
> /usr/lib/python3.5/unittest/mock.py(1981)__eq__()
-> def __eq__(self, other):