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

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

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

推荐PyPI第三方库


热门话题
java如何拆分字符串(基于各种分隔符),但不保留空格?   解析。Json格式的txt文件和knime中的java   java Spring rest api为什么在rest api调用的响应中更改了数据类型   升华文本3抛出java。lang.ClassNotFoundException,而记事本++不存在   java Android指纹扫描仪在尝试5次后停止工作?   java Android如何设置精确的重复报警?   java如何使用HTTPGET connect为access API输入用户名和密码   java当测试报告显示没有测试失败时,Gradle为什么说“有失败的测试”?   用Gson实现java获取响应   MapReduce程序中函数错误的java不可映射参数   java spring安全性不符合自动代理的条件   java GWT使用异步回调进行同步/阻塞调用   java奇怪的类数组问题无法在jsp中显示   如何在java中使用PrinterJob使用epl打印条形码   java如何在JTable中居中单元格   将Java Mockito测试转换为Kotlin   html Java正则表达式模式匹配到多个相同标记   testCompile中缺少java Gradle(Android)多项目依赖项   在输入提示后输入字符串时发生java FileNotFoundException