Поставщик данных юнит-тестов 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. Это обеспечивает ответ на ваше требование
Счастливое Кодирование