[IPython-dev] What is the best way to write unit test for Magics Classes?
Aquil H. Abdullah
aquil.abdullah at gmail.com
Mon Apr 1 18:33:24 EDT 2013
So I came up with the following solution:
# --- Global IPython Shell used in the rest of the test no need to keep
recreating.
ipshell = app_magics.get_ip_shell()
app_magics.load_app_magics(ipshell)
I could then do things like the following in my unit tests:
class TestAppMagics(object):
def setup(self):
pass
def teardown(self):
pass
def test_simulated_positions(self):
"""
Test our computation of the current positions
"""
# NOTE: This is just a stub to show how things might work
# hardcoded values will be replaced
ipshell.run_cell('result = %current_simulated_positions')
csp = ipshell.user_ns['result']
nose.tools.eq_(csp['x'], -330, 'position x: %s dose not match
expected result -330' % csp['x'])
I looked at what was being done in test_interactiveshell.py in
IPython.core.tests.test_interactiveshell.<https://github.com/ipython/ipython/blob/master/IPython/core/tests/test_interactiveshell.py>
I know that this doesn't give me true isolation from IPython, but it seems
to work.
Any comments?
On Sun, Mar 31, 2013 at 10:39 PM, Aquil H. Abdullah <
aquil.abdullah at gmail.com> wrote:
> Hello All,
>
> I am working on an application that uses IPython for a user interface.
> Basically, I need to interact with the results of a long running process.
> I've decided to use the InteracteShellEmbed class along with a Magics
> subclass to make things a little bit easier for the users.
>
> I like to write unit tests as I develop my code, but it isn't quite clear
> to me how to unit tests classes that inherit from Magics and are decorated
> by line_magic or needs_local_scope.
>
> For example, let's say I have the following code:
>
> @magics_class
> class AppMagics(Magics):
> """
> Application magics to do stuff
> """
> @needs_local_scope
> @line_magic
> def peek_a_boo(self, line, local_ns=None):
> """
> In [Peek 2]: x = 10
>
> In [Peek 3]: %peek_a_boo x
> Out[Peek 3]: 420
> """
> var = local_ns.get(line)
> cool_stuff = 42 * int(var)
> return col_stuff
>
> In this instance I can use a a doc-test, however after reading the Dev:
> Testing page on github ,
> https://github.com/ipython/ipython/wiki/Dev%3A-Testing. It looks like
> I'll have to make some modifications which I don't quite understand.
>
> Can anyone provide me with some resources for a newb to figure out how to
> right unit tests for Magics?
>
>
> --
> Aquil H. Abdullah
> aquil.abdullah at gmail.com
>
--
Aquil H. Abdullah
aquil.abdullah at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ipython-dev/attachments/20130401/7bfb9400/attachment.html>
More information about the IPython-dev
mailing list