From 3e23f1bd06d87d94072f357842273dc030c8d301 Mon Sep 17 00:00:00 2001 From: Donne Martin Date: Mon, 26 Jan 2015 09:00:11 -0500 Subject: [PATCH] Added IPython Notebook demonstrating nose unit tests. --- README.md | 3 +- core/unit_tests.ipynb | 157 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 core/unit_tests.ipynb diff --git a/README.md b/README.md index 46d6427..184d76a 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,10 @@ Python data analysis IPython Notebooks (core Python, NumPy, pandas, matplotlib, IPython Notebooks demonstrating core Python functionality geared towards data analysis. * [basics](http://nbviewer.ipython.org/github/donnemartin/pydatanotebooks/blob/master/core/basics.ipynb) -* [datetime](http://nbviewer.ipython.org/github/donnemartin/pydatanotebooks/blob/master/core/datetime.ipynb) * [data structures](http://nbviewer.ipython.org/github/donnemartin/pydatanotebooks/blob/master/core/structs.ipynb) * [data structures utilities](http://nbviewer.ipython.org/github/donnemartin/pydatanotebooks/blob/master/core/structs_utils.ipynb) +* [datetime](http://nbviewer.ipython.org/github/donnemartin/pydatanotebooks/blob/master/core/datetime.ipynb) +* [unit tests](http://nbviewer.ipython.org/github/donnemartin/pydatanotebooks/blob/master/core/unit_tests.ipynb) ## numpy diff --git a/core/unit_tests.ipynb b/core/unit_tests.ipynb new file mode 100644 index 0000000..b39e91e --- /dev/null +++ b/core/unit_tests.ipynb @@ -0,0 +1,157 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:bdca080b7a3c3e13406cff167e5e8a56e199b53e7c3b965c6583665afd737e4e" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Nose Unit Tests with IPython Notebook" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Install Nose" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```bash\n", + "pip install nose\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create the Code" + ] + }, + { + "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" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%file tests/test_type_util.py\n", + "from nose.tools import assert_equal\n", + "from pydatasnippets.core.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" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "!nosetests tests/test_type_util.py" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "..\r\n", + "----------------------------------------------------------------------\r\n", + "Ran 2 tests in 0.001s\r\n", + "\r\n", + "OK\r\n" + ] + } + ], + "prompt_number": 3 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file