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 Android同步不同页面上的按钮   java评测每个类收集的垃圾对象实例数   java(Spring MVC+Hibernate 4+Test 4)自动连线DAO返回NULL   java Android编辑文本和虚拟键盘   java Selenium与BrowserMobProxy   JAVAlang.NoClassDefFoundError:com/sun/jersey/spi/inject/Errors$关闭原因?   java为什么在我成功登录后仍然会出现“不正确的帐户或密码或用户类型”   安卓应用程序在重新启动java时崩溃。网UnknownHostException:无法解析主机   多线程在Java中同步共享静态对象的正确方法是什么?   未调用自定义注释的java类验证(约束类)   java如何将指定目录的存档文件放入所需位置?   java如何识别Selenium中的每个编辑文本字段,如果它们的Xpath都相同   使用gwtmockito/mockito的java简单单选按钮单元测试?