测试调用实例变量的类方法 - AttributeError

问题描述 投票:0回答:1

当我们使用实例变量时,如何模拟一个类来单独测试它的方法?这是我试图测试的代码的一个例子。

class Employee:
    def __init__(self, id):
        self.id = id
        self.email = self.set_email()

    def set_email():
        df = get_all_info()
        return df[df[id] == self.id].email[0]

def get_all_info():
    # ...

我的想法是模拟Employee类然后调用set_email方法来测试它。测试代码:

def test_set_email(get_all_info_mock):
    # ...
    mock_object = unittest.mock.Mock(Employee)

    actual_email = Employee.set_email(mock_object)

    assert actual_email == expected_email

运行测试时,我收到以下错误。

AttributeError:Mock对象没有属性'id'

我试着按照这里的指示:Better way to mock class attribute in python unit test。我也尝试将mock设置为属性mock,id为side_effect,id为return_value,但我似乎无法弄明白。我不想修补Employee类,因为目标是测试它的方法。

python mocking
1个回答
1
投票

您需要做的就是设置id属性。

def test_set_email(get_all_info_mock):
    # ...
    mock_object = unittest.mock.Mock(id=3)  # Or whatever id you need

    actual_email = Employee.set_email(mock_object)

    assert actual_email == expected_email
© www.soinside.com 2019 - 2024. All rights reserved.