Поставщик данных юнит-тестов Python

Я пытаюсь создать модульный тест в 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 ответа

Решение

Ваш itemIds Функция должна возвращать кортеж кортежей, но, как вы его кодировали, она возвращает кортеж строк. Вам нужно добавить , в круглых скобках, чтобы вернуть один элемент кортежа, попробуйте заменить ваш код следующим:

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

Jeroen De Dauw Decorator DataProvider может выполнять итерации только по вызываемым объектам, т. Е. Кортежам, спискам, множествам, int и т. Д., Но не в 2D, вы передаете Tuple из Tuple, и поставщик данных Decorator не реализован для его обработки.

Следовательно вы можете пойти на idata decorator of ddt. Это обеспечивает ответ на ваше требование

Счастливое Кодирование

Другие вопросы по тегам