12

我正在尝试在具有数据提供程序的 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。

4

2 回答 2

11

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

itemIds = lambda: (('q42',), ('Q42',), ('Q1', ), ('Q1000',), ('Q31337',),)
于 2013-09-19T22:43:25.050 回答
0

Jeroen De Dauw Decorator DataProvider 只能迭代可调用对象,即元组、列表、集合、int 等,但不是在 2D 上,您正在传递元组的元组,并且装饰器数据提供程序没有实现来处理它。

因此,您可以选择 ddt 的 idata 装饰器。它为您的要求提供答案

快乐编码

于 2018-11-20T12:08:58.550 回答