Python单元测试数据提供程序

14
我正在尝试在Python中创建一个带有数据提供程序的单元测试。由于unittest库不支持这种功能,我正在使用unittest_data_provider包。 我遇到了错误,但不确定它来自哪里(我是Python新手)。
我的代码:
import unittest
from wikibase.dataModel.item_id import ItemId
from unittest_data_provider import data_provider


class TestItemId(unittest.TestCase):
    itemIds = lambda: (
        ( 'q42' ),
        ( 'Q42' ),
        ( 'Q1' ),
        ( 'Q1000' ),
        ( 'Q31337' ),
    )

    @data_provider(itemIds)
    def test_constructor(self, itemString):
        itemId = ItemId(itemString)
        self.assertEqual(itemId.getSerialization(), itemString)

我得到的错误消息:
``` 文件 "/usr/local/lib/python3.3/dist-packages/unittest_data_provider/__init__.py",第 7 行,在 repl 中, fn(self, *i) TypeError: test_constructor() 接受 2 个位置参数,但提供了 4 个。 ```
这是使用 Python 3.3。

2
unittest-data-provider 的 Github 页面上写道:!!! 不要使用它,而是尝试使用 nose 测试生成器 !!! 请参阅此 url - Shadi
2个回答

12

你的 itemIds 函数应该返回一个元组嵌套的元组,但是根据你的编码方式,它返回了一个字符串元组。你需要在括号中添加一个逗号来返回一个单个项目的元组,试着用以下代码替换你的代码:

itemIds = lambda: (('q42',), ('Q42',), ('Q1', ), ('Q1000',), ('Q31337',),)

0

Jeroen De Dauw 装饰器 DataProvider 只能迭代可调用对象,例如元组、列表、集合、整数等,但不能迭代二维数组。您正在传递元组的元组,而 Decorator 数据提供程序未实现处理它的功能。

因此,您可以选择使用 ddt 的 idata 装饰器。 它提供了您需求的答案。

祝编码愉快!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接