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

时间:2019-04-23 16:52:17

标签: python mocking

当类使用实例变量时,我该如何模拟类以单独测试其方法?这是我要测试的代码示例。

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:模拟对象没有属性“ id”

我尝试按照此处的指示进行操作:Better way to mock class attribute in python unit test。 我还尝试将模拟设置为属性模拟,id为side_effect,id为return_value,但我似乎无法弄清楚。我不想修补Employee类,因为目标是测试它的方法。

1 个答案:

答案 0 :(得分: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