You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am having an issue where the patch method from the unittest.mock module is only working when I patch attributes of imported modules in other files. I do not understand if this is an issue of my import patterns or a misunderstanding of how patching works. (I am importing the app code before the patch is able to run).
I devised a test to show how the functionality is confusing me:
In my app code I have the following code
from datetime import date
...
import boto3
...
from common.functions import asodates2datetime
from core.mixins.usecases import ASOUsecaseTools
class foo:
@staticmethod
@ASOUsecaseTools.get_by_name
def bar(self, relevant_date):
client = boto3.client("s3")
today = date.today()
date = asodates2datetime(relevant_date)
And from my test code I can patch in the following way:
@mock.patch("src.aoi.usecases.date")
@mock.patch("src.aoi.usecases.ASOUsecaseTools.get_by_name")
@mock.patch("src.aoi.usecases.asodates2datetime")
@mock.patch("src.aoi.usecases.boto3.client")
def test_foo_gets_bar(self, m_d, m_g, m_a, m_c):
m_d.today.return_value = <date>
m_d.side_effect = lambda *args, **kw: date(*args, **kw)
# more patching of functions here
However, when the test is run, If I set a breakpoint in the bar function and check the value of the patched items, only the patched methods show up as MagicMock
Also the fact that patched methods work but classes and functions don't indicates that the import structure is not a problem because the imported methods would be overwritten in the same way as the imported classes. It also indicates that the import paths are not incorrect; as the only difference between the patches is the type of object they are patching.
My current workaround is using the freeze package to freeze the date, but I prefer using builtin packages if possible.
CPython versions tested on:
3.9
Operating systems tested on:
macOS
The text was updated successfully, but these errors were encountered:
Bug report
Bug description:
I am having an issue where the
patch
method from theunittest.mock
module is only working when I patch attributes of imported modules in other files. I do not understand if this is an issue of my import patterns or a misunderstanding of how patching works. (I am importing the app code before the patch is able to run).I devised a test to show how the functionality is confusing me:
In my app code I have the following code
And from my test code I can patch in the following way:
However, when the test is run, If I set a breakpoint in the
bar
function and check the value of the patched items, only the patched methods show up as MagicMockThe thing that confuses me is that I am patching along with how the docs say to patch: https://docs.python.org/3/library/unittest.mock-examples.html#partial-mocking
Also the fact that patched methods work but classes and functions don't indicates that the import structure is not a problem because the imported methods would be overwritten in the same way as the imported classes. It also indicates that the import paths are not incorrect; as the only difference between the patches is the type of object they are patching.
My current workaround is using the freeze package to freeze the date, but I prefer using builtin packages if possible.
CPython versions tested on:
3.9
Operating systems tested on:
macOS
The text was updated successfully, but these errors were encountered: