unittest的phpunit-like@dataprovider修饰符
unittest-dataprovider的Python项目详细描述
免责声明:
这只是unittest数据提供程序(https://pypi.org/project/unittest-data-provider/)的克隆,其最新版本为https://github.com/yourlabs/unittest-data-provider(package maintener没有更新pypi上的project,我也没有收到他对我的请求的任何答复)。
此代码段的包: http://melp.nl/2011/02/phpunit-style-dataprovider-in-python-unit-test/
安装:
pip install unittest-dataprovider
导入:
import unittest from unittest_dataprovider import data_provider
然后,您可以使用数据提供程序,而无需将此片段粘贴到某个位置 …
谢谢医生!
DRM的原始博客文章粘贴在此处,以防原始链接断开
phpunit有一个方便的特性,您可以使用它向测试提供测试数据。 这称为数据提供程序,通过使用 @数据提供程序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:使用decorator提供测试数据
在为一些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() @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))
顺便说一句,我们非常感谢对备选方案的建议。