Skip to content

Commit 36a2567

Browse files
authored
Remove mocked coro (#10910)
1 parent b25eca0 commit 36a2567

20 files changed

+75
-124
lines changed

CHANGES/9212.packaging.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Removed remaining `make_mocked_coro` in the test suite -- by :user:`polkapolka`.

CONTRIBUTORS.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ Pavol Vargovčík
295295
Pawel Kowalski
296296
Pawel Miech
297297
Pepe Osca
298+
Phebe Polk
298299
Philipp A.
299300
Pierre-Louis Peeters
300301
Pieter van Beek

aiohttp/test_utils.py

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import asyncio
44
import contextlib
55
import gc
6-
import inspect
76
import ipaddress
87
import os
98
import socket
@@ -42,7 +41,6 @@
4241
from .abc import AbstractCookieJar, AbstractStreamWriter
4342
from .client_reqrep import ClientResponse
4443
from .client_ws import ClientWebSocketResponse
45-
from .helpers import sentinel
4644
from .http import HttpVersion, RawRequestMessage
4745
from .streams import EMPTY_PAYLOAD, StreamReader
4846
from .typedefs import LooseHeaders, StrOrURL
@@ -682,10 +680,10 @@ def make_mocked_request(
682680

683681
if writer is None:
684682
writer = mock.Mock()
685-
writer.write_headers = make_mocked_coro(None)
686-
writer.write = make_mocked_coro(None)
687-
writer.write_eof = make_mocked_coro(None)
688-
writer.drain = make_mocked_coro(None)
683+
writer.write_headers = mock.AsyncMock(return_value=None)
684+
writer.write = mock.AsyncMock(return_value=None)
685+
writer.write_eof = mock.AsyncMock(return_value=None)
686+
writer.drain = mock.AsyncMock(return_value=None)
689687
writer.transport = transport
690688

691689
protocol.transport = transport
@@ -701,18 +699,3 @@ def make_mocked_request(
701699
req._match_info = match_info
702700

703701
return req
704-
705-
706-
def make_mocked_coro(
707-
return_value: Any = sentinel, raise_exception: Any = sentinel
708-
) -> Any:
709-
"""Creates a coroutine mock."""
710-
711-
async def mock_coro(*args: Any, **kwargs: Any) -> Any:
712-
if raise_exception is not sentinel:
713-
raise raise_exception
714-
if not inspect.isawaitable(return_value):
715-
return return_value
716-
await return_value
717-
718-
return mock.Mock(wraps=mock_coro)

docs/testing.rst

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -793,25 +793,6 @@ Test Client
793793
Utilities
794794
~~~~~~~~~
795795

796-
.. function:: make_mocked_coro(return_value)
797-
798-
Creates a coroutine mock.
799-
800-
Behaves like a coroutine which returns *return_value*. But it is
801-
also a mock object, you might test it as usual
802-
:class:`~unittest.mock.Mock`::
803-
804-
mocked = make_mocked_coro(1)
805-
assert 1 == await mocked(1, 2)
806-
mocked.assert_called_with(1, 2)
807-
808-
809-
:param return_value: A value that the mock object will return when
810-
called.
811-
:returns: A mock object that behaves as a coroutine which returns
812-
*return_value* when called.
813-
814-
815796
.. function:: unused_port()
816797

817798
Return an unused port number for IPv4 TCP protocol.

tests/test_client_request.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
from aiohttp.compression_utils import ZLibBackend
3535
from aiohttp.connector import Connection
3636
from aiohttp.http import HttpVersion10, HttpVersion11
37-
from aiohttp.test_utils import make_mocked_coro
3837
from aiohttp.typedefs import LooseCookies
3938

4039

@@ -831,7 +830,7 @@ async def test_content_encoding(
831830
"post", URL("http://python.org/"), data="foo", compress="deflate", loop=loop
832831
)
833832
with mock.patch("aiohttp.client_reqrep.StreamWriter") as m_writer:
834-
m_writer.return_value.write_headers = make_mocked_coro()
833+
m_writer.return_value.write_headers = mock.AsyncMock()
835834
resp = await req.send(conn)
836835
assert req.headers["TRANSFER-ENCODING"] == "chunked"
837836
assert req.headers["CONTENT-ENCODING"] == "deflate"
@@ -867,7 +866,7 @@ async def test_content_encoding_header(
867866
loop=loop,
868867
)
869868
with mock.patch("aiohttp.client_reqrep.StreamWriter") as m_writer:
870-
m_writer.return_value.write_headers = make_mocked_coro()
869+
m_writer.return_value.write_headers = mock.AsyncMock()
871870
resp = await req.send(conn)
872871

873872
assert not m_writer.return_value.enable_compression.called
@@ -940,7 +939,7 @@ async def test_chunked_explicit(
940939
) -> None:
941940
req = ClientRequest("post", URL("http://python.org/"), chunked=True, loop=loop)
942941
with mock.patch("aiohttp.client_reqrep.StreamWriter") as m_writer:
943-
m_writer.return_value.write_headers = make_mocked_coro()
942+
m_writer.return_value.write_headers = mock.AsyncMock()
944943
resp = await req.send(conn)
945944

946945
assert "chunked" == req.headers["TRANSFER-ENCODING"]

tests/test_client_response.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
from aiohttp.client_reqrep import ClientResponse, RequestInfo
1717
from aiohttp.connector import Connection
1818
from aiohttp.helpers import TimerNoop
19-
from aiohttp.test_utils import make_mocked_coro
2019

2120

2221
class WriterMock(mock.AsyncMock):
@@ -1142,7 +1141,7 @@ async def test_response_read_triggers_callback(
11421141
loop: asyncio.AbstractEventLoop, session: ClientSession
11431142
) -> None:
11441143
trace = mock.Mock()
1145-
trace.send_response_chunk_received = make_mocked_coro()
1144+
trace.send_response_chunk_received = mock.AsyncMock()
11461145
response_method = "get"
11471146
response_url = URL("http://def-cl-resp.org")
11481147
response_body = b"This is response"

tests/test_client_session.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
from aiohttp.cookiejar import CookieJar
3434
from aiohttp.http import RawResponseMessage
3535
from aiohttp.pytest_plugin import AiohttpClient, AiohttpServer
36-
from aiohttp.test_utils import make_mocked_coro
3736
from aiohttp.tracing import Trace
3837

3938

@@ -791,9 +790,9 @@ async def handler(request: web.Request) -> web.Response:
791790
trace_config_ctx = mock.Mock()
792791
body = "This is request body"
793792
gathered_req_headers: CIMultiDict[str] = CIMultiDict()
794-
on_request_start = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
795-
on_request_redirect = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
796-
on_request_end = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
793+
on_request_start = mock.AsyncMock()
794+
on_request_redirect = mock.AsyncMock()
795+
on_request_end = mock.AsyncMock()
797796

798797
with io.BytesIO() as gathered_req_body, io.BytesIO() as gathered_res_body:
799798

@@ -872,7 +871,7 @@ async def redirect_handler(request: web.Request) -> NoReturn:
872871
app.router.add_get("/", root_handler)
873872
app.router.add_get("/redirect", redirect_handler)
874873

875-
mocks = [mock.Mock(side_effect=make_mocked_coro(mock.Mock())) for _ in range(7)]
874+
mocks = [mock.AsyncMock() for _ in range(7)]
876875
(
877876
on_request_start,
878877
on_request_redirect,
@@ -963,8 +962,8 @@ def to_url(path: str) -> URL:
963962

964963

965964
async def test_request_tracing_exception() -> None:
966-
on_request_end = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
967-
on_request_exception = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
965+
on_request_end = mock.AsyncMock()
966+
on_request_exception = mock.AsyncMock()
968967

969968
trace_config = aiohttp.TraceConfig()
970969
trace_config.on_request_end.append(on_request_end)

tests/test_client_ws.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
from aiohttp.http import WS_KEY
1919
from aiohttp.http_websocket import WSMessageClose
2020
from aiohttp.streams import EofStream
21-
from aiohttp.test_utils import make_mocked_coro
2221

2322

2423
async def test_ws_connect(
@@ -383,7 +382,7 @@ async def test_close(
383382
m_req.return_value.set_result(mresp)
384383
writer = mock.Mock()
385384
WebSocketWriter.return_value = writer
386-
writer.close = make_mocked_coro()
385+
writer.close = mock.AsyncMock()
387386

388387
session = aiohttp.ClientSession()
389388
resp = await session.ws_connect("http://test.org")
@@ -492,7 +491,7 @@ async def test_close_exc(
492491
m_req.return_value.set_result(mresp)
493492
writer = mock.Mock()
494493
WebSocketWriter.return_value = writer
495-
writer.close = make_mocked_coro()
494+
writer.close = mock.AsyncMock()
496495

497496
session = aiohttp.ClientSession()
498497
resp = await session.ws_connect("http://test.org")
@@ -628,7 +627,7 @@ async def test_reader_read_exception(
628627

629628
writer = mock.Mock()
630629
WebSocketWriter.return_value = writer
631-
writer.close = make_mocked_coro()
630+
writer.close = mock.AsyncMock()
632631

633632
session = aiohttp.ClientSession()
634633
resp = await session.ws_connect("http://test.org")
@@ -780,7 +779,7 @@ async def test_ws_connect_deflate_per_message(
780779
m_req.return_value = loop.create_future()
781780
m_req.return_value.set_result(mresp)
782781
writer = WebSocketWriter.return_value = mock.Mock()
783-
send_frame = writer.send_frame = make_mocked_coro()
782+
send_frame = writer.send_frame = mock.AsyncMock()
784783

785784
session = aiohttp.ClientSession()
786785
resp = await session.ws_connect("http://test.org")

tests/test_connector.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
_DNSCacheTable,
5050
)
5151
from aiohttp.pytest_plugin import AiohttpClient, AiohttpServer
52-
from aiohttp.test_utils import make_mocked_coro, unused_port
52+
from aiohttp.test_utils import unused_port
5353
from aiohttp.tracing import Trace
5454

5555

@@ -1423,10 +1423,10 @@ async def test_tcp_connector_dns_tracing(
14231423
) -> None:
14241424
session = mock.Mock()
14251425
trace_config_ctx = mock.Mock()
1426-
on_dns_resolvehost_start = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
1427-
on_dns_resolvehost_end = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
1428-
on_dns_cache_hit = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
1429-
on_dns_cache_miss = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
1426+
on_dns_resolvehost_start = mock.AsyncMock()
1427+
on_dns_resolvehost_end = mock.AsyncMock()
1428+
on_dns_cache_hit = mock.AsyncMock()
1429+
on_dns_cache_miss = mock.AsyncMock()
14301430

14311431
trace_config = aiohttp.TraceConfig(
14321432
trace_config_ctx_factory=mock.Mock(return_value=trace_config_ctx)
@@ -1470,8 +1470,8 @@ async def test_tcp_connector_dns_tracing_cache_disabled(
14701470
) -> None:
14711471
session = mock.Mock()
14721472
trace_config_ctx = mock.Mock()
1473-
on_dns_resolvehost_start = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
1474-
on_dns_resolvehost_end = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
1473+
on_dns_resolvehost_start = mock.AsyncMock()
1474+
on_dns_resolvehost_end = mock.AsyncMock()
14751475

14761476
trace_config = aiohttp.TraceConfig(
14771477
trace_config_ctx_factory=mock.Mock(return_value=trace_config_ctx)
@@ -1527,8 +1527,8 @@ async def test_tcp_connector_dns_tracing_throttle_requests(
15271527
) -> None:
15281528
session = mock.Mock()
15291529
trace_config_ctx = mock.Mock()
1530-
on_dns_cache_hit = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
1531-
on_dns_cache_miss = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
1530+
on_dns_cache_hit = mock.AsyncMock()
1531+
on_dns_cache_miss = mock.AsyncMock()
15321532

15331533
trace_config = aiohttp.TraceConfig(
15341534
trace_config_ctx_factory=mock.Mock(return_value=trace_config_ctx)
@@ -1671,8 +1671,8 @@ async def test_connect(loop: asyncio.AbstractEventLoop, key: ConnectionKey) -> N
16711671
async def test_connect_tracing(loop: asyncio.AbstractEventLoop) -> None:
16721672
session = mock.Mock()
16731673
trace_config_ctx = mock.Mock()
1674-
on_connection_create_start = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
1675-
on_connection_create_end = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
1674+
on_connection_create_start = mock.AsyncMock()
1675+
on_connection_create_end = mock.AsyncMock()
16761676

16771677
trace_config = aiohttp.TraceConfig(
16781678
trace_config_ctx_factory=mock.Mock(return_value=trace_config_ctx)
@@ -2677,8 +2677,8 @@ async def test_connect_queued_operation_tracing(
26772677
) -> None:
26782678
session = mock.Mock()
26792679
trace_config_ctx = mock.Mock()
2680-
on_connection_queued_start = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
2681-
on_connection_queued_end = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
2680+
on_connection_queued_start = mock.AsyncMock()
2681+
on_connection_queued_end = mock.AsyncMock()
26822682

26832683
trace_config = aiohttp.TraceConfig(
26842684
trace_config_ctx_factory=mock.Mock(return_value=trace_config_ctx)
@@ -2724,7 +2724,7 @@ async def test_connect_reuseconn_tracing(
27242724
) -> None:
27252725
session = mock.Mock()
27262726
trace_config_ctx = mock.Mock()
2727-
on_connection_reuseconn = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
2727+
on_connection_reuseconn = mock.AsyncMock()
27282728

27292729
trace_config = aiohttp.TraceConfig(
27302730
trace_config_ctx_factory=mock.Mock(return_value=trace_config_ctx)
@@ -3228,7 +3228,7 @@ async def test_unix_connector_not_found(loop: asyncio.AbstractEventLoop) -> None
32283228

32293229
@pytest.mark.skipif(not hasattr(socket, "AF_UNIX"), reason="requires UNIX sockets")
32303230
async def test_unix_connector_permission(loop: asyncio.AbstractEventLoop) -> None:
3231-
m = make_mocked_coro(raise_exception=PermissionError())
3231+
m = mock.AsyncMock(side_effect=PermissionError())
32323232
with mock.patch.object(loop, "create_unix_connection", m):
32333233
connector = aiohttp.UnixConnector("/" + uuid.uuid4().hex)
32343234

@@ -3267,7 +3267,7 @@ async def test_named_pipe_connector_not_found(
32673267
async def test_named_pipe_connector_permission(
32683268
proactor_loop: asyncio.AbstractEventLoop, pipe_name: str
32693269
) -> None:
3270-
m = make_mocked_coro(raise_exception=PermissionError())
3270+
m = mock.AsyncMock(side_effect=PermissionError())
32713271
with mock.patch.object(proactor_loop, "create_pipe_connection", m):
32723272
asyncio.set_event_loop(proactor_loop)
32733273
connector = aiohttp.NamedPipeConnector(pipe_name)

tests/test_http_writer.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from aiohttp.base_protocol import BaseProtocol
1313
from aiohttp.compression_utils import ZLibBackend
1414
from aiohttp.http_writer import _serialize_headers
15-
from aiohttp.test_utils import make_mocked_coro
1615

1716

1817
@pytest.fixture
@@ -787,7 +786,7 @@ async def test_write_calls_callback(
787786
transport: asyncio.Transport,
788787
loop: asyncio.AbstractEventLoop,
789788
) -> None:
790-
on_chunk_sent = make_mocked_coro()
789+
on_chunk_sent = mock.AsyncMock()
791790
msg = http.StreamWriter(protocol, loop, on_chunk_sent=on_chunk_sent)
792791
chunk = b"1"
793792
await msg.write(chunk)
@@ -800,7 +799,7 @@ async def test_write_eof_calls_callback(
800799
transport: asyncio.Transport,
801800
loop: asyncio.AbstractEventLoop,
802801
) -> None:
803-
on_chunk_sent = make_mocked_coro()
802+
on_chunk_sent = mock.AsyncMock()
804803
msg = http.StreamWriter(protocol, loop, on_chunk_sent=on_chunk_sent)
805804
chunk = b"1"
806805
await msg.write_eof(chunk=chunk)

0 commit comments

Comments
 (0)