PHPUnit风格的@dataprovider装饰器用于unittest
项目描述
此代码段的包:http://melp.nl/2011/02/phpunit-style-dataprovider-in-python-unit-test/
安装
pip install unittest-data-provider
导入
import unittest from unittest_data_provider import data_provider
然后您可以使用data_provider,而无需将此代码段放在某处...
感谢drm!
以下是drm原始博客文章的粘贴,以防原始链接失效
PHPUnit有一个方便的功能,可以为您测试提供测试数据。这被称为数据提供者,通过在测试上注解@dataProvider methodName实现。Python的unittest模块似乎没有这样的功能。
PHPUnit的版本
数据提供者返回一个二维数组,包含测试参数。例如
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') ); } }
运行此测试将调用testParseColor()测试4次,每次使用cssColors()返回的数组作为参数。
Python:使用装饰器提供测试数据
在编写某些Python代码的测试时,我发现Python的unittest似乎没有这样的功能。所以我使用装饰器实现了自己的功能。
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
示例用法
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))
顺便说一句,非常欢迎提出替代方案。
项目详情
关闭
unittest-data-provider-1.0.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 86bc7fb6608c2570aeedadea346fe3034afc940807dd7519e95e5dbc899ac2be |
|
MD5 | 922f0b805f2100fbedfe9cbece1226d8 |
|
BLAKE2b-256 | c08eb95d91f4bcd2b5f02878d284b74cabbc553f30b131571ba699a4f1a2f99d |