unittest的phpunit-like@dataprovider修饰符

unittest-data-provider的Python项目详细描述


此代码段的包: 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

然后,您可以使用数据提供程序,而无需将此片段粘贴到某个位置 …

谢谢医生!

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()

    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))

顺便说一句,我们非常感谢对备选方案的建议。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
从类访问属性时发生java编译错误   性能更好的Java序列化替代方案   java EhCache Spring XML集成命名空间   java如何使用表达式在JSP中检索新生成的图像   Java neo4j,REST和内存   java如何在mouseListener中删除和创建对象?   java在Hibernate中使用预定义前缀填充Id列   java无法从Elastic Beanstalk连接到Amazon SimpleDB   多线程通过单击JavaSwing中的按钮创建具有新名称的类的新对象   java如何在Kotlin中实现Memento模式   Android系列。对java进行排序。lang.NullPointerException   方法中的java重载构造函数内部类