[Async-sig] async testing question

Dima Tisnek dimaqq at gmail.com
Sat Jul 1 06:49:20 EDT 2017


Hi Chris,

This specific test is easy to write (mock first to return a resolved
future, 2nd to block and 3rd to assert False)

OTOH complexity of the general case is unbounded and generally exponential.
It's akin to testing multithreaded code.
(There's an academic publication from Microsoft where they built a runtime
that would run each test really many times, where scheduler is rigged to
order runnable tasks differently on each run. I hope someone rewrites this
for asyncio)

Certainty [better] tools are needed, and ultimately it's a tradeoff between
sane/understable/maintainable tests and testing deeper/more corner cases.

Just my 2c...

On Jul 1, 2017 12:11, "Chris Jerdonek" <chris.jerdonek at gmail.com> wrote:

> I have a question about testing async code.
>
> Say I have a coroutine:
>
>     async def do_things():
>         await do_something()
>         await do_more()
>         await do_even_more()
>
> And future:
>
>     task = ensure_future(do_things())
>
> Is there a way to write a test case to check that task.cancel() would
> behave correctly if, say, do_things() is waiting at the line
> do_more()?
>
> In real life, this situation can happen if a function like the
> following is called, and an exception happens in one of the given
> tasks.  One of the tasks in the "pending" list could be at the line
> do_more().
>
>     done, pending = await asyncio.wait(tasks,
>                          return_when=asyncio.FIRST_EXCEPTION)
>
> But in a testing situation, you don't necessarily have control over
> where each task ends up when FIRST_EXCEPTION occurs.
>
> Thanks,
> --Chris
> _______________________________________________
> Async-sig mailing list
> Async-sig at python.org
> https://mail.python.org/mailman/listinfo/async-sig
> Code of Conduct: https://www.python.org/psf/codeofconduct/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/async-sig/attachments/20170701/cbe4d0f6/attachment-0001.html>


More information about the Async-sig mailing list