Title: bpo-26467: Adds AsyncMock for asyncio Mock library support by lisroach · Pull Request #9296 · python/cpython · GitHub
Open Graph Title: bpo-26467: Adds AsyncMock for asyncio Mock library support by lisroach · Pull Request #9296 · python/cpython
X Title: bpo-26467: Adds AsyncMock for asyncio Mock library support by lisroach · Pull Request #9296 · python/cpython
Description: This is my initial pass at supporting coroutine mocking via a new Mock subclass, CoroutineMock. It can be used to mock out coroutines and have them validate as coroutines: >>> mock = CoroutineMock() >>> asyncio.iscoroutinefunction(mock) True Test that a coroutine was awaited: class TestTests(unittest.TestCase): def test_assert_awaited(self): async def main(): mock = CoroutineMock() with self.assertRaises(AssertionError): mock.assert_awaited() await mock() mock.assert_awaited() asyncio.run(main()) Also awaited_with, awaited_once_with, etc. Things that I could use advice on: Some of the code has been borrowed by asynctest (https://pypi.org/project/asynctest/) which is licensed under Apache 2. I have reached out to the author and am waiting to hear back, but am not sure how we feel about having Apache 2 licensed stuff in CPython. I could rewrite those spots if needed. inspect.iscoroutine will return False for CoroutineMock objects. This is because the check is isinstance(object, types.CoroutineType), and CoroutineTypes are concrete. I've looked into using something like, register, but it doesn't work here, so I need someway to make a Mock look like a types.CoroutineType but I am unsure how. In CoroutineMockAssert tests, I have asyncio.events._event_loop_policy unset because it causes the env to change when running tests if it is not unset. There is probably a better way to do this where the environment doesn't get polluted? I plan on working on getting more example test cases for the CoroutineArguments test section, would be happy for advice though. And I will be writing up the documentation once the code has settled. https://bugs.python.org/issue26467
Open Graph Description: This is my initial pass at supporting coroutine mocking via a new Mock subclass, CoroutineMock. It can be used to mock out coroutines and have them validate as coroutines: >>> mock = Corou...
X Description: This is my initial pass at supporting coroutine mocking via a new Mock subclass, CoroutineMock. It can be used to mock out coroutines and have them validate as coroutines: >>> ...
Opengraph URL: https://github.com/python/cpython/pull/9296
X: @github
Domain: github.com
| route-pattern | /:user_id/:repository/pull/:id/checks(.:format) |
| route-controller | pull_requests |
| route-action | checks |
| fetch-nonce | v2:2ee6bd2d-61da-2d23-4036-912d477d9a79 |
| current-catalog-service-hash | 87dc3bc62d9b466312751bfd5f889726f4f1337bdff4e8be7da7c93d6c00a25a |
| request-id | 9C0A:30AAB2:C24803:109FC1D:6969EEAD |
| html-safe-nonce | 24e242eff659b82926afdd5b7f2da5c567332bc9098747499e36e59be47a825f |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5QzBBOjMwQUFCMjpDMjQ4MDM6MTA5RkMxRDo2OTY5RUVBRCIsInZpc2l0b3JfaWQiOiIxMzUwNDA5OTUyMzkwOTM0MTg5IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 934a7294d310bb45e13a48f2a37f1f7965363c485c593f487b8a829f1a2f860a |
| hovercard-subject-tag | pull_request:215502301 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,checks,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/python/cpython/pull/9296/checks |
| twitter:image | https://avatars.githubusercontent.com/u/11097768?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/11097768?s=400&v=4 |
| og:image:alt | This is my initial pass at supporting coroutine mocking via a new Mock subclass, CoroutineMock. It can be used to mock out coroutines and have them validate as coroutines: >>> mock = Corou... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | 7b32f1c7c4549428ee399213e8345494fc55b5637195d3fc5f493657579235e8 |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive full-width full-width-p-0 |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | bdde15ad1b403e23b08bbd89b53fbe6bdf688cad |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width