我正在尝试在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。
答案 0 :(得分:10)
你的itemIds
函数应该返回一个元组元组,但是你编码它的方式,它返回一个字符串元组。您需要在括号内添加,
以返回单个项元组,尝试使用以下代码替换您的代码:
itemIds = lambda: (('q42',), ('Q42',), ('Q1', ), ('Q1000',), ('Q31337',),)
答案 1 :(得分:0)
Jeroen De Dauw 装饰器数据提供者只能在可调用对象(即元组,列表,集合,整型等)上进行迭代,但不能在2D上进行传递,而您是在传递元组的元组,并且没有实现装饰器数据提供者来处理它。
因此,您可以选择ddt的idata装饰器。 它可以满足您的要求
快乐编码