{ "metadata": { "name": "", "signature": "sha256:bbaa3dbaf3f3dd5f608d2ece862d90a61e36ed7e862ce826e0be0132635fbec2" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Nose Unit Tests with IPython Notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Nose\n", "\n", "Testing is a vital part of software development. Nose extends unittest to make testing easier." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Install Nose\n", "\n", "Run the following command line:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "!pip install nose" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create the Code\n", "\n", "Save your code to a file with the %%file magic:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%file type_util.py\n", "class TypeUtil:\n", "\n", " @classmethod\n", " def is_iterable(cls, obj):\n", " \"\"\"Determines if obj is iterable.\n", "\n", " Useful when writing functions that can accept multiple types of\n", " input (list, tuple, ndarray, iterator). Pairs well with\n", " convert_to_list.\n", " \"\"\"\n", " try:\n", " iter(obj)\n", " return True\n", " except TypeError:\n", " return False\n", "\n", " @classmethod\n", " def convert_to_list(cls, obj):\n", " \"\"\"Converts obj to a list if it is not a list and it is iterable, \n", " else returns the original obj.\n", " \"\"\"\n", " if not isinstance(obj, list) and cls.is_iterable(obj):\n", " obj = list(obj)\n", " return obj\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Overwriting type_util.py\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create the Nose Tests\n", "\n", "Save your test to a file with the %%file magic:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%file tests/test_type_util.py\n", "from nose.tools import assert_equal\n", "from ..type_util import TypeUtil\n", "\n", "\n", "class TestUtil():\n", "\n", " def test_is_iterable(self):\n", " assert_equal(TypeUtil.is_iterable('foo'), True)\n", " assert_equal(TypeUtil.is_iterable(7), False)\n", "\n", " def test_convert_to_list(self):\n", " assert_equal(isinstance(TypeUtil.convert_to_list('foo'), list), True)\n", " assert_equal(isinstance(TypeUtil.convert_to_list(7), list), False)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Overwriting tests/test_type_util.py\n" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Run the Nose Tests\n", "\n", "Run the following command line:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "!nosetests tests/test_type_util.py -v" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "core.tests.test_type_util.TestUtil.test_convert_to_list ... ok\r\n", "core.tests.test_type_util.TestUtil.test_is_iterable ... ok\r\n", "\r\n", "----------------------------------------------------------------------\r\n", "Ran 2 tests in 0.001s\r\n", "\r\n", "OK\r\n" ] } ], "prompt_number": 3 } ], "metadata": {} } ] }