[New-bugs-announce] [issue28318] Python unittest.mock.mock_calls stores references to arguments instead of their values

Guillaume Chorn report at bugs.python.org
Fri Sep 30 13:54:38 EDT 2016


New submission from Guillaume Chorn:

In the unittest.mock library, when a Mock object stores the calls made on it in its `mock_calls` attribute, it appears to store references to the call arguments instead of the actual values of the call arguments. In cases where call args are mutable types, this results in the undesirable behavior below:

```python
import mock

arg = ['one']

test_function(arg)

# passes
test_function.assert_has_calls([mock.call(['one'])])

arg += ['two']

test_function(arg)

# fails, even though we just verified the first call above!
test_function.assert_has_calls([
    mock.call(['one']),
    mock.call(['one','two'])
])

# passes, even though we didn't make the exact same call twice!
test_function.assert_has_calls([
    mock.call(['one', 'two']),
    mock.call(['one', 'two'])
])
```

----------
components: Tests
messages: 277764
nosy: Guillaume Chorn
priority: normal
severity: normal
status: open
title: Python unittest.mock.mock_calls stores references to arguments instead of their values
type: behavior
versions: Python 3.4

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue28318>
_______________________________________


More information about the New-bugs-announce mailing list