[TIP] Testing asynchronous method
Herman Sheremetyev
herman at swebpage.com
Tue Oct 18 18:44:01 PDT 2011
Maybe I'm missing something, but why can't you just set up a mock or
spy on the callback with any of the existing tools?
Flexmock example:
from flexmock import flexmock
class TestMyAsync(unittest.TestCase):
def test_async_method(self):
x = SomeAsyncModules()
flexmock(x).should_call('callback').once # will let the
callback method run and just check that it did
# -- or --
# flexmock(x).should_receive('callback').once # will stub
callback out but check that it was called
x.async_method(999, x.callback)
More details here:
http://has207.github.com/flexmock/
Flexmock has a number of facilities that let you make assertions about
whether things have been done or not. Whether they're async or not
shouldn't make a difference..
-Herman
On Wed, Oct 19, 2011 at 2:40 AM, Pere Martir <pere.martir4 at gmail.com> wrote:
> I want to test if a callback is called within a predefined time. I am
> surprised that I cannot find a simple solution on Internet.
>
> I don't want to use Twisted Trial or tornado.testing but only Python
> built-in unittest, is it possible ? I am developing an asynchronous
> library by TDD, and I don't want to depend on Twisted or Tornado.
>
> http://twistedmatrix.com/trac/wiki/TwistedTrial
> http://www.tornadoweb.org/documentation/testing.html
>
> Inspired by tornado.testing, I've implemented the following, which I
> believe is not correct:
>
>
> class TestMyAsync(unittest.TestCase):
> def setUp(self):
> self._stopped = False
>
> def _wait(self, timeout):
> if self._stopped: return True
> t = 0
> self._running = True
> while self._running:
> time.sleep(1)
> if not self._running:
> break
> t += 1
> if t == timeout:
> return False
> return True
>
> def _stop(self):
> self._stopped = True
> self._running = False
>
> def test_async_method(self):
> def callback(ticket):
> self.assertEqual(ticket, 998)
> self._stop()
> x = SomeAysncModules()
> x.async_method(999, callback)
> self.assertTrue(self._wait(3))
>
> _______________________________________________
> testing-in-python mailing list
> testing-in-python at lists.idyll.org
> http://lists.idyll.org/listinfo/testing-in-python
>
More information about the testing-in-python
mailing list