所以我有以下函数正在尝试进行单元测试:
def _extract_celery_task_args(*args: tuple, **kwargs: dict):
....
我尝试过类似的事情:
def test_extract_celery_task_args_max_four_args(mock_ConvertToParsingIntDate):
args = ('task', 'parser_code', 'group_name', 'date')
kwargs = {'mic': 'XEUR', 'something': 'else'}
try:
_extract_celery_task_args(args, kwargs)
except ValueError as ve:
assert False, ("More than 4 positional arguments passed to _extract_celery_task_args"
"function")
但是当我在
_extract_celery_task_args
内设置断点并打印出args
和kwargs
时,我得到:
args = (('task', 'parser_code', 'group_name', 'date'), {'mic': 'XEUR', 'something': 'else'})
kwargs = {}
我是不是传错了
kwargs
?
您似乎在测试中正确传递了 args 和 kwargs 参数,但在 _extract_celery_task_args 函数中定义 args 参数的方式存在问题。 *args 参数用于将任何其他位置参数收集为元组,而 **kwargs 参数将关键字参数收集为字典。在您的测试中,您已经分别将 args 和 kwargs 作为元组和字典传递,因此无需在函数定义中使用 * 和 ** 解包运算符。
您需要在测试模式下删除这些*和**,或者重写您的测试。
以下是修改 _extract_celery_task_args 函数定义的方法:
def _extract_celery_task_args(args: tuple, kwargs: dict):
# Your function logic here
如果您想在 _extract_celery_task_args 函数中保留 *args 和 **kwargs 语法,您应该相应地调整您的测试。在这种情况下,您需要使用正确的解包语法传递参数。以下是如何修改测试以使用现有函数定义:
def test_extract_celery_task_args_max_four_args(mock_ConvertToParsingIntDate):
args = ('task', 'parser_code', 'group_name', 'date')
kwargs = {'mic': 'XEUR', 'something': 'else'}
try:
_extract_celery_task_args(*args, **kwargs)
except ValueError as ve:
assert False, ("More than 4 positional arguments passed to _extract_celery_task_args"
" function")
在此修改后的测试中,在调用 _extract_celery_task_args 时,*args 和 **kwargs 分别用于解压 args 元组和 kwargs 字典中的值。这样,您的函数将以 *args 和 **kwargs 参数的预期格式接收参数,并且您的测试应该按预期工作。