Make type of unitest.mock.Any a subclass of Any (#14708)

This commit is contained in:
Semyon Moroz
2025-09-14 22:25:41 +04:00
committed by GitHub
parent b2777f4cbb
commit 0d100b9110
2 changed files with 30 additions and 2 deletions
+28 -1
View File
@@ -7,7 +7,7 @@ from decimal import Decimal
from fractions import Fraction
from typing import TypedDict, Union
from typing_extensions import assert_type
from unittest.mock import AsyncMock, MagicMock, Mock, patch
from unittest.mock import _ANY, ANY, AsyncMock, MagicMock, Mock, patch
case = unittest.TestCase()
@@ -226,3 +226,30 @@ with patch.object(Decimal, "exp", new=42) as obj_explicit_new_enter:
with patch.object(Decimal, "exp", new_callable=lambda: 42) as obj_explicit_new_callable_enter:
assert_type(obj_explicit_new_callable_enter, int)
###
# Tests for mock.ANY
###
assert_type(ANY, _ANY) # Make sure ANY has runtime type
# Regression tests. See https://github.com/python/typeshed/issues/14701
class TD(TypedDict):
x: str
y: float
td: TD = {"x": "1", "y": ANY}
def test_as_param(x: str) -> None: ...
test_as_param(ANY)
def test_as_return_value(x: int) -> TD:
return {"x": str(x), "y": ANY}
+2 -1
View File
@@ -508,7 +508,8 @@ class MagicProxy(Base):
def create_mock(self) -> Any: ...
def __get__(self, obj: Any, _type: Any | None = None) -> Any: ...
class _ANY:
# See https://github.com/python/typeshed/issues/14701
class _ANY(Any):
def __eq__(self, other: object) -> Literal[True]: ...
def __ne__(self, other: object) -> Literal[False]: ...
__hash__: ClassVar[None] # type: ignore[assignment]