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.
Release files for unittest-data-provider 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| unittest-data-provider-1.0.1.tar.gz | 2.9 kB | Details |
Release files / unittest-data-provider-1.0.1.tar.gz
| Download URL | unittest-data-provider-1.0.1.tar.gz |
|---|---|
| Size | 2.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
86bc7fb6608c2570aeedadea346fe3034afc940807dd7519e95e5dbc899ac2be
|
|
BLAKE2b-256 checksum How to use checksums |
c08eb95d91f4bcd2b5f02878d284b74cabbc553f30b131571ba699a4f1a2f99d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |