PHPUnit-like @dataprovider decorator for unittest
Project description
Disclaimer:
This is a only a clone of unittest-data-provider (https://pypi.org/project/unittest-data-provider/) with the last version of https://github.com/yourlabs/unittest-data-provider (package maintener didn’t update project on Pypi and I haven’t had any answer from him to my request).
Package for this snippet: http://melp.nl/2011/02/phpunit-style-dataprovider-in-python-unit-test/
Install:
pip install unittest-dataprovider
Import:
import unittest from unittest_dataprovider 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() @staticmethod def colors(): return ( ( (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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for unittest-dataprovider-1.0.3.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 32a3fc7c36f7b4486a11e32b5d1e089793b8255e35e8531b4ad1ebb2f799270f |
|
MD5 | 6706701120736083fab0edc4f13d8770 |
|
BLAKE2b-256 | 77e8b0f4f91438e596fcaad95111943bf1629bb3a28994de2e4e487c2c72ac4e |