bpo-35022: unittest.mock.MagicMock now also supports __fspath__ (GH-9960)
The MagicMock class supports many magic methods, but not __fspath__. To ease testing with modules such as os.path, this function is now supported by default.
This commit is contained in:
parent
1770d1c512
commit
6c83d9f4a7
|
@ -1699,6 +1699,10 @@ The full list of supported magic methods is:
|
||||||
* Descriptor methods: ``__get__``, ``__set__`` and ``__delete__``
|
* Descriptor methods: ``__get__``, ``__set__`` and ``__delete__``
|
||||||
* Pickling: ``__reduce__``, ``__reduce_ex__``, ``__getinitargs__``,
|
* Pickling: ``__reduce__``, ``__reduce_ex__``, ``__getinitargs__``,
|
||||||
``__getnewargs__``, ``__getstate__`` and ``__setstate__``
|
``__getnewargs__``, ``__getstate__`` and ``__setstate__``
|
||||||
|
* File system path representation: ``__fspath__``
|
||||||
|
|
||||||
|
.. versionchanged:: 3.8
|
||||||
|
Added support for :func:`os.PathLike.__fspath__`.
|
||||||
|
|
||||||
|
|
||||||
The following methods exist but are *not* supported as they are either in use
|
The following methods exist but are *not* supported as they are either in use
|
||||||
|
|
|
@ -1713,6 +1713,7 @@ magic_methods = (
|
||||||
"complex int float index "
|
"complex int float index "
|
||||||
"round trunc floor ceil "
|
"round trunc floor ceil "
|
||||||
"bool next "
|
"bool next "
|
||||||
|
"fspath "
|
||||||
)
|
)
|
||||||
|
|
||||||
numerics = (
|
numerics = (
|
||||||
|
@ -1760,6 +1761,7 @@ _calculate_return_value = {
|
||||||
'__hash__': lambda self: object.__hash__(self),
|
'__hash__': lambda self: object.__hash__(self),
|
||||||
'__str__': lambda self: object.__str__(self),
|
'__str__': lambda self: object.__str__(self),
|
||||||
'__sizeof__': lambda self: object.__sizeof__(self),
|
'__sizeof__': lambda self: object.__sizeof__(self),
|
||||||
|
'__fspath__': lambda self: f"{type(self).__name__}/{self._extract_mock_name()}/{id(self)}",
|
||||||
}
|
}
|
||||||
|
|
||||||
_return_values = {
|
_return_values = {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import math
|
import math
|
||||||
import unittest
|
import unittest
|
||||||
|
import os
|
||||||
import sys
|
import sys
|
||||||
from unittest.mock import Mock, MagicMock, _magics
|
from unittest.mock import Mock, MagicMock, _magics
|
||||||
|
|
||||||
|
@ -293,6 +294,15 @@ class TestMockingMagicMethods(unittest.TestCase):
|
||||||
# how to test __sizeof__ ?
|
# how to test __sizeof__ ?
|
||||||
|
|
||||||
|
|
||||||
|
def test_magic_methods_fspath(self):
|
||||||
|
mock = MagicMock()
|
||||||
|
expected_path = mock.__fspath__()
|
||||||
|
mock.reset_mock()
|
||||||
|
|
||||||
|
self.assertEqual(os.fspath(mock), expected_path)
|
||||||
|
mock.__fspath__.assert_called_once()
|
||||||
|
|
||||||
|
|
||||||
def test_magic_methods_and_spec(self):
|
def test_magic_methods_and_spec(self):
|
||||||
class Iterable(object):
|
class Iterable(object):
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
:class:`unittest.mock.MagicMock` now supports the ``__fspath__`` method
|
||||||
|
(from :class:`os.PathLike`).
|
Loading…
Reference in New Issue