跳转到主要内容

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 (2.9 kB 查看哈希值)

上传时间

由以下支持