{ "info": { "author": "Kevin Stone", "author_email": "kevinastone@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: ISC License (ISCL)", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4" ], "description": "===============================\nGenerator\n===============================\n\n.. image:: https://img.shields.io/travis/kevinastone/generator.svg\n :target: https://travis-ci.org/kevinastone/generator\n\n.. image:: https://img.shields.io/pypi/v/generator.svg\n :target: https://pypi.python.org/pypi/generator\n\n\nGenerator is a helper for generating test methods for nose while still using unittest.\n\n* Free software: ISC license\n* Documentation: https://generator.readthedocs.org.\n\n\nInstallation\n------------\n\n::\n\n pip install test-generator\n\n\nIntroduction\n------------\n\nHave you ever written tests that loop through a list of inputs to validate the functionality?\n\nSomething like?\n\n.. code-block:: python\n\n from mything import thingy\n\n class MyTestCase(unittest.TestCase):\n def test_thingy(self):\n for input in [\n 'a',\n 'b',\n 'cccc',\n 'ddd'\n 'eeeeee',\n 'f',\n 'g'\n ]:\n self.assertTrue(thingy(input))\n\n\nBut running in a loop limits all the functionality in ``TestCase`` like per-\ntest setUp or tearDown. It also fails on the first input and you can't run a\nsingle test input, you have to run them all? (Doesn't work well when each\ntest is more complicated than this toy case).\n\nInstead, what if you wrote your test like:\n\n.. code-block:: python\n\n from generator import generator, generate\n from mything import thingy\n\n @generator\n class MyTestCase(unittest.TestCase):\n\n @generate('a', 'b', 'cccc', 'ddd', 'eeeeee', 'f', 'g')\n def test_thingy(self, input):\n self.assertTrue(thingy(input))\n\n\nAnd when you run your tests, you see:\n\n.. code-block:: shell\n\n ----------------------------------------------------------------------\n Ran 7 tests in 0.001s\n\n OK\n\nGenerator gives you simple decorators to mulitply your test methods based on\nan argument list. It's great for checking a range of inputs, a list of error\nconditions or expected status codes.\n\n\nExamples\n--------\n\nAPI Client Error Handling\n^^^^^^^^^^^^^^^^^^^^^^^^^\n\nLet's make sure our API client properly handles error conditions and raises a\ngeneric APIError under the conditions. We'll use mock to patch out the actual\nAPI call to return our response.\n\n.. code-block:: python\n\n import mock\n from generator import generator, generate\n from example import client, APIError\n\n @generator\n class TestAPIErrorHandling(unittest.TestCase):\n\n @generate(400, 401, 403, 404, 500, 502, 503)\n def test_error(self, status_code):\n with mock.patch(client, '_request') as _request_stub:\n _request_stub.return_value.status_code = status_code\n\n self.assertRaises(APIError):\n client.get('/path/')\n\n\nTest Fixtures\n^^^^^^^^^^^^^\n\nLet's make sure our API client properly handles error conditions and raises a\ngeneric APIError under the conditions. We'll use mock to patch out the actual\nAPI call to return our response.\n\n.. code-block:: python\n\n from generator import generator, generate\n from example.sanitize import strip_tags\n\n @generator\n class TestStripTags(unittest.TestCase):\n\n @generate(\n ('

hi

', 'hi'),\n ('something', 'something'),\n ('

some text

', 'some text'),\n )\n def test_strip_tags(self, input, expected):\n self.assertEqual(strip_tags(input), expected)\n\n\n\n\nHistory\n-------\n\n0.1.1 (2015-10-15)\n---------------------\n\n* First release on PyPI.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kevinastone/generator", "keywords": "generator", "license": "ISCL", "maintainer": "", "maintainer_email": "", "name": "test-generator", "package_url": "https://pypi.org/project/test-generator/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/test-generator/", "project_urls": { "Homepage": "https://github.com/kevinastone/generator" }, "release_url": "https://pypi.org/project/test-generator/0.1.2/", "requires_dist": [ "six" ], "requires_python": "", "summary": "Generator is a helper for generating test methods for nose while still using unittest", "version": "0.1.2" }, "last_serial": 2265884, "releases": { "0.1.0": [], "0.1.1": [ { "comment_text": "", "digests": { "md5": "ed54c94d785a0e28c1c0af832bef180c", "sha256": "01e6aa3e01b5a0cb2ef05c80cdb259abae820d82f07ffcd0ded9bce03f3c38d4" }, "downloads": -1, "filename": "test_generator-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ed54c94d785a0e28c1c0af832bef180c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5517, "upload_time": "2015-10-15T08:36:02", "url": "https://files.pythonhosted.org/packages/4a/52/e5eec4d926eb466844eaeeaac84af5372e946dd520fb2b6adf3388e620b0/test_generator-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "79a838ebea6088a34bc6ba6d8b896f93", "sha256": "da9cfc2a26bc5bd1f43ef20050fd531790cc5283adcc49e34e0cf33345d6583d" }, "downloads": -1, "filename": "test-generator-0.1.1.tar.gz", "has_sig": false, "md5_digest": "79a838ebea6088a34bc6ba6d8b896f93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13280, "upload_time": "2015-10-15T08:36:12", "url": "https://files.pythonhosted.org/packages/0d/42/381803d0066154f7971a4f9175710d2e123dd403e64291799e9f2978da6d/test-generator-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "b2075e2d02536088d57e806ecd42d7cc", "sha256": "7de659848ca3fafd6b64b802d06872d7c5eaa3835818083c4eb9c142e90fd904" }, "downloads": -1, "filename": "test_generator-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b2075e2d02536088d57e806ecd42d7cc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6045, "upload_time": "2016-08-06T18:25:14", "url": "https://files.pythonhosted.org/packages/e3/1c/6cf39cf103e6a6f5b236a882c6da38688af58da1e5cdb25afa18ea12683a/test_generator-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6c69e73ba5b4b3ed62f7bcda071c64f1", "sha256": "ad5925c814bfe79497b43df096e3bb52c166d1577f7aff160137301676232f4a" }, "downloads": -1, "filename": "test-generator-0.1.2.tar.gz", "has_sig": false, "md5_digest": "6c69e73ba5b4b3ed62f7bcda071c64f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13635, "upload_time": "2016-08-06T18:25:16", "url": "https://files.pythonhosted.org/packages/1e/b3/90a71f2f4f9de5467c5518f0d75876eb7501c07fa1e25353ceaa56da3973/test-generator-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b2075e2d02536088d57e806ecd42d7cc", "sha256": "7de659848ca3fafd6b64b802d06872d7c5eaa3835818083c4eb9c142e90fd904" }, "downloads": -1, "filename": "test_generator-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b2075e2d02536088d57e806ecd42d7cc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6045, "upload_time": "2016-08-06T18:25:14", "url": "https://files.pythonhosted.org/packages/e3/1c/6cf39cf103e6a6f5b236a882c6da38688af58da1e5cdb25afa18ea12683a/test_generator-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6c69e73ba5b4b3ed62f7bcda071c64f1", "sha256": "ad5925c814bfe79497b43df096e3bb52c166d1577f7aff160137301676232f4a" }, "downloads": -1, "filename": "test-generator-0.1.2.tar.gz", "has_sig": false, "md5_digest": "6c69e73ba5b4b3ed62f7bcda071c64f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13635, "upload_time": "2016-08-06T18:25:16", "url": "https://files.pythonhosted.org/packages/1e/b3/90a71f2f4f9de5467c5518f0d75876eb7501c07fa1e25353ceaa56da3973/test-generator-0.1.2.tar.gz" } ] }