获取传递给mock obj的构造函数的值

2024-04-26 07:07:14 发布

您现在位置:Python中文网/ 问答频道 /正文

假设这种情况:

import random
import string

class objectToMock:

    Arg1:list = []
    Arg2:list = None

    def __init__(self, arg1:list, arg2:str):
        self.Arg1 = arg1
        self.Arg2 = arg2
        return

def functionToTest():
    #Get list of random numbers.
    listArg = []
    for x in range(0,5):
         listArg.append(random.randint(1,1000))

    #Get a random string
    stringArg = \
        ''.join(random.choices(string.ascii_uppercase + string.digits, k=5))


    return objectToMock(listArg, stringArg)

如果我想测试functionToTest函数,我应该如何模拟objectToMock,以便获得传递给objectToMock构造函数的值?你知道吗

到目前为止,我已经做到了:

import unittest.mock
import #Module with my test objects

def Test_functionToTest
    with mock(objectToMock) as mock_objectToMock:
        result = functionToTest()

我不知道如何将值传递给mock\u objectToMock。你知道吗


Tags: importselfstringreturndefrandommocklist
1条回答
网友
1楼 · 发布于 2024-04-26 07:07:14

您可以从模拟对象中获取call_args_list,并将其解压为tuple。方法如下:

import random
import string

class ObjectToMock(object):
    arg1:list = []
    arg2:list = None
    def __init__(self, arg1:list, arg2:str):
        self.arg1 = arg1
        self.arg2 = arg2
        return

def function_to_test():
    #Get list of random numbers.
    list_arg = []
    for x in range(0,5):
         list_arg.append(random.randint(1,1000))
    #Get a random string
    string_arg = ''.join(random.choices(string.ascii_uppercase + string.digits, k=5))
    return ObjectToMock(list_arg, string_arg)

from unittest.mock import patch

def test_function_to_test():
    with patch('__main__.ObjectToMock') as mock_object_to_mock:
        result = function_to_test()
        for call_obj in mock_object_to_mock.call_args_list:
            args, kwargs = call_obj  # Unpack the call function as a tuple
            print('Here are my args: {}, kwargs: {}'.format(args, kwargs))

请注意,我在一个脚本中运行了所有这些,因此我要修补的对象位于__main__。你的课应该在你班上的任何一个单元里。还要注意,我改变了所有的骆驼壳/蛇壳混合。您应该尽量遵循python风格的指南,因为它使您和其他人更容易阅读/维护您的代码。你知道吗

相关问题 更多 >