<div dir="ltr"><div><div><div>Hi,<br><br></div>asynctest provides a asynctest.TestCase class, inheriting unittest.TestCase. It supports coroutines as test cases and adds a few other useful features like checking that there are no scheduled callbacks left(see <a href="http://asynctest.readthedocs.io/en/latest/asynctest.case.html#asynctest.case.asynctest.fail_on">http://asynctest.readthedocs.io/en/latest/asynctest.case.html#asynctest.case.asynctest.fail_on</a>) or ClockedTestCase which allows to to control time in the test.<br><br></div><div>Sorry for the bugs left in asynctest, I try to add as many tests as possible to covers all cases, but I'm having a hard time keeping the library compatible with unittest. A few remarks though:<br>* keeping the behavior of asynctest in sync with unittest sometimes leads to unexpected behaviors making asynctest look more buggy than it is (at least I hope so...),<br></div><div>* some libraries are hard to mock correctly because they use advanced features, for instance, aiohttp uses its own coroutine type, I still don't know what can be done with those cases,<br></div><div>* I'm also thinking about removing support of python 3.4 (@coroutine decorator, etc) as it's a lot of work.<br></div><div><br>Unfortunately, I only have a few hours here and there to work on my free time, as I'm not sponsored by my employer anymore. And, as many other open-source libraries out there, I don't receive a lot of feedback nor help :)<br><br></div><div>Thanks for using (or at least trying to use) asynctest!<br><br></div>Martin</div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-07-04 9:38 GMT+02:00 Alex Grönholm <span dir="ltr"><<a href="mailto:alex.gronholm@nextday.fi" target="_blank">alex.gronholm@nextday.fi</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">For asyncio, you can write your test functions as coroutines if you use pytest-asyncio. You can even write test fixtures using coroutines. Mocking coroutine functions can be done using asynctest, although I've found that library a bit buggy.<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
Chris Jerdonek kirjoitti 02.07.2017 klo 00:00:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Sat, Jul 1, 2017 at 1:42 PM, Nathaniel Smith <<a href="mailto:njs@pobox.com" target="_blank">njs@pobox.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Jul 1, 2017 3:11 AM, "Chris Jerdonek" <<a href="mailto:chris.jerdonek@gmail.com" target="_blank">chris.jerdonek@gmail.com</a>> wrote:<br>
Is there a way to write a test case to check that task.cancel() would<br>
behave correctly if, say, do_things() is waiting at the line<br>
do_more()?<br>
<br>
One possibility for handling this case with a minimum of mocking would be to<br>
hook do_more so that it calls task.cancel and then calls the regular<br>
do_more.<br>
<br>
Beyond that it depends on what the actual functions are, I guess. If do_more<br>
naturally blocks under some conditions then you might be able to set up<br>
those conditions and then call cancel. Or you could try experimenting with<br>
tests that call sleep(0) a fixed number of times before issuing the cancel,<br>
and repeat with different iteration counts to find different cancel points.<br>
</blockquote>
Thanks, Nathaniel. The following would be overkill in my case, but<br>
your suggestion makes me wonder if it would make sense for there to be<br>
testing tools that have functions to do things like "run the event<br>
loop until <this future> is at <this line of code>." Do such things<br>
exist? This is a little bit related to what Dima was saying about<br>
tools.<br>
<br>
--Chris<br>
______________________________<wbr>_________________<br>
Async-sig mailing list<br>
<a href="mailto:Async-sig@python.org" target="_blank">Async-sig@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/async-sig" rel="noreferrer" target="_blank">https://mail.python.org/mailma<wbr>n/listinfo/async-sig</a><br>
Code of Conduct: <a href="https://www.python.org/psf/codeofconduct/" rel="noreferrer" target="_blank">https://www.python.org/psf/cod<wbr>eofconduct/</a><br>
</blockquote>
<br>
______________________________<wbr>_________________<br>
Async-sig mailing list<br>
<a href="mailto:Async-sig@python.org" target="_blank">Async-sig@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/async-sig" rel="noreferrer" target="_blank">https://mail.python.org/mailma<wbr>n/listinfo/async-sig</a><br>
Code of Conduct: <a href="https://www.python.org/psf/codeofconduct/" rel="noreferrer" target="_blank">https://www.python.org/psf/cod<wbr>eofconduct/</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Martin<a href="http://www.martiusweb.net" target="_blank"></a> Richard<br><a href="http://www.martiusweb.net" target="_blank">www.martiusweb.net</a><br>
</div></div>
</div>