Python unittest数据提供者

时间:2013-09-19 21:59:44

标签: python unit-testing python-3.x python-3.3 dataprovider

我正在尝试在python中创建一个具有数据提供程序的单元测试。由于unittest库不支持这个诞生,我正在使用unittest_data_provider package。我收到错误,不知道它来自哪里(我是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 个答案:

答案 0 :(得分:10)

你的itemIds函数应该返回一个元组元组,但是你编码它的方式,它返回一个字符串元组。您需要在括号内添加,以返回单个项元组,尝试使用以下代码替换您的代码:

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

答案 1 :(得分:0)

Jeroen De Dauw 装饰器数据提供者只能在可调用对象(即元组,列表,集合,整型等)上进行迭代,但不能在2D上进行传递,而您是在传递元组的元组,并且没有实现装饰器数据提供者来处理它。

因此,您可以选择ddt的idata装饰器。 它可以满足您的要求

快乐编码