Metadata-Version: 2.2
Name: unittest-data-provider
Version: 1.0.1
Summary: PHPUnit-like @dataprovider decorator for unittest
Home-page: http://github.com/yourlabs/unittest-data-provider
Author: drm from melp.nl, packaged for reuse by James Pic
Author-email: jamespic@gmail.com
License: MIT
Keywords: unittest dataprovider
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: summary

Package for this snippet:
http://melp.nl/2011/02/phpunit-style-dataprovider-in-python-unit-test/

Install::

    pip install unittest-data-provider

Import::

    import unittest
    from unittest_data_provider import data_provider

You can then use data_provider without having to stick this snippet somewhere
...

Thanks drm !

Original blog post by drm pasted here in case the original link goes down
=========================================================================

PHPUnit has a handy feature with which you can provide testdata to your tests.
This is called a data provider, and is implemented by annotating a test with
@dataProvider methodName. Python’s unittest module doesn’t seem to have such a
feature.

PHPUnit’s version
-----------------

The data provider returns a two-dimensional array of test arguments. For
example::

    class CssParserTest extends PHPUnit_Framework_TestCase {
        function setUp() {
            $this->parser = new CssParser();
        }
    
        /**
        * @dataProvider cssColors
        */
        function testParseColor($color, $notation) {
            $this->assertEquals($color, $this->parser->parseColor($notation));
        }
    
    
        function cssColors() {
            return array(
                array(array(0, 0, 0), '#000'),
                array(array(0, 0, 0), '#000000'),
                array(array(0, 0, 0), 'rgb(0, 0, 0)')
                array(array(0, 0, 0), 'black')
            );
        }
    }

Running this test would call the testParseColor() test 4 times, with each of
the arrays returned by cssColors() as the arguments.

Python: providing test data using a decorator
---------------------------------------------

While writing tests for some Python code, I discovered that Python’s unittest
doesn’t seem to have such a feature. So I implemented my own, using a
decorator::

    def data_provider(fn_data_provider):
        """Data provider decorator, allows another callable to provide the data for the test"""
        def test_decorator(fn):
            def repl(self, *args):
                for i in fn_data_provider():
                    try:
                        fn(self, *i)
                    except AssertionError:
                        print "Assertion error caught with data set ", i
                        raise
            return repl
        return test_decorator

Example usage::

    class CssParserTest:
        def setUp(self):
            self.parser = CssColor()
    
        colors = lambda: (
            ( (0, 0, 0), '#000' ),
            ( (0, 0, 0), '#000000' ),
            ( (0, 0, 0), 'rgb(0, 0, 0)' ),
            ( (0, 0, 0), 'black' )
        )
    
        @data_provider(colors):
        def test_parse_color(self, color, notation):
            self.assertEquals(color, self.parser.parse_color(notation))

Suggestions of alternatives are greatly appreciated, by the way.
