【问题标题】:Python unittest data providerPython unittest 数据提供者
【发布时间】:2013-09-19 21:59:44
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    Jeroen De Dauw Decorator DataProvider 只能迭代可调用对象,即 Tuples、lists、set、int 等,但不能在 2D 上,您正在传递 Tuple 的 Tuple 并且 Decorator 数据提供程序没有实现来处理它。

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

    快乐编码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 2020-08-07
      • 2021-12-24
      • 2011-10-03
      相关资源
      最近更新 更多